![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите переписать с VCL на Api
M.A. © (2014-11-05 19:52:00)Помогите переписать с VCL на Api.
Требуется отобразить на Static и естественно---- не знаю как!!!
В VCL использовал так:
getPicture(Image1.Picture.Bitmap, TagMy); С помощью TImage.
Вот часть кода.
function PictureMimeValide(mime: string):boolean;
begin
result:=(pos('jpeg',lowerCase(mime))>0) or (pos('jpg',lowerCase(mime))>0) {$IFDEF UNICODE} or (pos('png',lowerCase(mime))>0) {$ENDIF};
end;
function TTagForm.AUDIOPictureExtract(var img: TMemorystream; Tagis : TAudioGenie3): string;
var
size: integer;
begin
result:='none';
if (Tagis.AUDIOAnalyzeFileW(Tagis.AUDIOLastFileW) in [MPEG,FLAC,WMA, MP4M4A]) or ((Tagis.ID3V2ExistsW)) then
begin
img:=TMemorystream.Create;
case Tagis.AUDIOAnalyzeFileW(Tagis.AUDIOLastFileW) of
MPEG:
begin
result:=lowerCase(Tagis.ID3V2GetPictureMimeW(1));
size:=Tagis.ID3V2GetPictureSizeW(1);
if (size>0) and BassPictureMimeValide(result) then
begin
img.SetSize(size);
Tagis.ID3V2GetPictureArrayW(img.Memory,size,1);
end
else
begin
img.Free;
result:='none';
end;
end;
FLAC:
begin
result:=lowerCase(Tagis.FLACGetPictureMimeW(1));
size:=Tagis.FLACGetPictureSizeW(1);
if (size>0) and BassPictureMimeValide(result) then
begin
img.SetSize(size);
Tagis.FLACGetPictureArrayW(img.Memory,size,1);
end
else
begin
img.Free;
result:='none';
end;
end;
WMA:
begin
result:=lowerCase(Tagis.WMAGetPictureMimeW(1));
size:=Tagis.WMAGetPictureSizeW(1);
if (size>0) and BassPictureMimeValide(result) then
begin
img.SetSize(size);
Tagis.WMAGetPictureArrayW(img.Memory,size,1);
end
else
begin
img.Free;
result:='none';
end;
end;
MP4M4A:
begin
result:=lowerCase(Tagis.MP4GetPictureMimeW(1));
size:={TagMy}Tagis.MP4GetPictureSizeW(1);
if (size>0) and BassPictureMimeValide(result) then
begin
img.SetSize(size);
Tagis.MP4GetPictureArrayW(img.Memory,size,1);
end
else
begin
img.Free;
result:='none';
end;
end;
end;
end;
end;
function getPicture(bitmap: TBitMap; Tagis : TAudioGenie3): boolean;
var
m: string;
img: TMemorystream;
j: TJPEGImage;
{$IFDEF UNICODE}
p: TPngImage;
{$ENDIF}
begin
result:=false;
m:=AUDIOPictureExtract(img, Tagis);
if BassPictureMimeValide(m) then begin
if (pos('jpeg',m)>0) or (pos('jpg',m)>0) then begin
// jpeg
j:=TJPEGImage.Create;
try
j.LoadFromStream(img);
j.DIBNeeded;
Bitmap.Assign(j);
result:=true;
finally
img.free;
j.Free;
end;
exit;
end
{$IFDEF UNICODE}
else if pos('png',m)>0 then begin
// png
p:=TPngImage.Create;
try
p.LoadFromStream(img);
Bitmap.Assign(p);
result:=true;
finally
img.free;
p.Free;
end;
exit;
end
{$ENDIF}
else img.free;
end; // end if valide
end;
M.A. (2014-11-16 21:36:00) [1]Подскажите пожалуйста как расчитать пропорции, если ширина или высота картинки больше ширины или высоты Statica.
Если картинка меньше, то все ОК.
M.A. (2014-11-16 21:31:00) [2]Здравствуйте. Достать из файла и отобразить в Static получилось.
Кооринаты верхнего левого угла картинки, при изменение разера картинки и Statica, определяются правильно. Только картинка пропадает, прихотитсь заново перерисовывыть после изменения размера Statica(Не в этом горе, пока что).
А вот пропорции -------- ну ни как.
Подскажите пожалуйста как расчитать пропорции.
function getPicture(FormImg, HW: HWND; Tagis : TAudioGenie3): boolean;
var
m: string;
img: TMemoryStream;
fg : IStream;
imgFile{, OutImage}: TGPImage;
Graphics : TGPGraphics;
Brush : TGPSolidBrush;
tr: TRect;
ImNachHeight , ImNachWidth : Integer;
begin
m:=AUDIOPictureExtract(img{fg}, Tagis);
img.Seek(0, soFromBeginning);
fg := TMyStreamAdapter.Create(img, soReference) as IStream;
imgFile := TGPImage.Create(fg);
Windowdc:=GetDC(HW);
Graphics:=TGPGraphics.Create(Windowdc);
Brush := TGPSolidBrush.Create(MakeColor(0, 0, 0));
GetClientRect(HW, tr);
Graphics.FillRectangle( Brush , MakeRect(0, 0, tr.Right, tr.Bottom ));
if tr.Right >= imgFile.GetWidth then
ImNachWidth := (tr.Right - imgFile.GetWidth) div 2
else
if imgFile.GetWidth > tr.Right then
begin
ImNachWidth:= 0;
end
else
begin
ImNachWidth := (imgFile.GetWidth - tr.Right) div 2;
end;
if tr.Bottom >= imgFile.GetHeight then
begin
ImNachHeight := (tr.Bottom - imgFile.GetHeight) div 2;
end
else
if imgFile.GetHeight > tr.Bottom then
begin
ImNachHeight := 0;
end
else
begin
ImNachHeight := (imgFile.GetHeight - tr.Bottom) div 2;
end;
Graphics.DrawImage(imgFile, ImNachWidth, ImNachHeight, imgFile.GetWidth, imgFile.GetHeight);
imgFile.Free;//уничтожаем класс изображения
Graphics.Free;
ReleaseDC(FormImg,windowdc);
img.Clear;
Brush.Free;
fg := nil;
end:
M.A. (2014-11-13 17:02:00) [3]
> DQ (10.11.14 01:15) [23]
> На ActiveX это кем там?
OleLoadPicture
DQ (2014-11-10 01:15:00) [4]На ActiveX это кем там?
jack128 (2014-11-09 21:56:00) [5]msdn.microsoft.com/en-us/library/windows/desktop/ms535410(v=vs.85).aspx
M.A. (2014-11-09 21:19:00) [6]А можно ли, из TMemoryStream достать картинку с помощью GDI+?
M.A. (2014-11-09 16:28:00) [7]Получилось, с использованием пока только ActiveX.
M.A. (2014-11-08 18:14:00) [8]
> DQ
Нашел. Разбираюсь.
DQ (2014-11-08 17:42:00) [9]Насколько знаю (хотя я изучал вопрос много лет назад) официальных для Делфи нету, есть некоторое количество проектов по переводу заголовочников/классов.
Если нужно только чисто для конвертации картинки из/в jpg - то можно экспортировать нужные функции и использовать так.
А вообще в Яндекс вбить "GDIPlus Delphi Headers" и найдётся. ):3
M.A. (2014-11-08 14:12:00) [10]Здравствуйте. А где можно достать GDI+ для delphi 2010?
DQ (2014-11-07 12:48:00) [11]Вы уверены что правильно понимаете "Static"? Image1 это не статик, это не оконный компонент.
А дочернее окно с классом Static в WinApi принимает HBITMAP. Нужно конвертировать картинку в bmp и всовывать в окно. На чистом WinApi без GDI+ не выйдет.
Kilkennycat (2014-11-06 18:03:00) [12]Наоборот. Использование винапи предполагает частое обращение к msdn, а там все на си.
M.A. (2014-11-05 23:47:00) [13]
> Kilkennycat © (05.11.14 23:35) [13]
> Ты уже прочитал книгу
Начал. Но очень не удобно, что на языке С.
Kilkennycat (2014-11-05 23:35:00) [14]Ты уже прочитал книгу, которую я советовал? Не получится так программировать, спрашивая на форумах отдельные элементы, не понимая ничего фундаментального.
Jeer (2014-11-05 23:00:00) [15]см [1]
M.A. (2014-11-05 22:27:00) [16]Может, хоть чем нибудь поможете?
M.A. (2014-11-05 21:34:00) [17]Очень жаль. Спасибо.
Rouse_ (2014-11-05 21:29:00) [18]
> И еще раз И если поможите, бегу ипереди паровоза
Не помогу. Причина проста - ты скомкал все в одну кучу.
M.A. (2014-11-05 20:51:00) [19]Ну так Tag файлов запихиваю в Edit'ы, а картинку , ну в Static.
И еще раз И если поможите, бегу ипереди паровоза, картинка размером 500х500. А окно шириной меньше(700х300), вдруг я захотел рахвернуть окно, примет ли картинка оригинальные размеры.
Rouse_ (2014-11-05 20:40:00) [20]Суть понял, тогда последний вопрос: зачем нужен Static?