Форум: "Начинающим";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
ВнизПомогите переписать с VCL на Api Найти похожие ветки
← →
M.A. (2014-11-05 19:52) [0]Помогите переписать с 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;
← →
Jeer © (2014-11-05 19:57) [1]Квота на гастарбайтеров снижена - успей воспользоваться.
← →
M.A. (2014-11-05 19:59) [2]
> Jeer © (05.11.14 19:57) [1]
> Квота на гастарбайтеров снижена - успей воспользоваться.
>
Что простите?
← →
Rouse_ © (2014-11-05 20:05) [3]
> Требуется отобразить на Static и естественно---- не знаю
> как!!!
Static - это обычное окно, у которого есть свое DC, оть все что ты это написал и выводи в WM_PAINT окна с классом Static.
← →
M.A. (2014-11-05 20:13) [4]Но в этом коде исользуется Graphic, а как без него? В этом вся загвоздка:
bitmap: TBitMap;
Bitmap.Assign(j);
← →
Rouse_ © (2014-11-05 20:21) [5]
> M.A. (05.11.14 20:13) [4]
> Но в этом коде исользуется Graphic, а как без него?
Не понял, т.е. с TJPEGImage и TPngImage у тебя уже получилось и вся проблема с TBitMap?
← →
M.A. (2014-11-05 20:29) [6]:-) Нет. Пытаюсь переписать проект на API для практики и уменьшения веса сборки. Хотелось бы узнать, как можно с минмальным использованием доп.модулей извлекать изображение из песенок.
← →
Rouse_ © (2014-11-05 20:40) [7]Суть понял, тогда последний вопрос: зачем нужен Static?
← →
M.A. (2014-11-05 20:51) [8]Ну так Tag файлов запихиваю в Edit"ы, а картинку , ну в Static.
И еще раз И если поможите, бегу ипереди паровоза, картинка размером 500х500. А окно шириной меньше(700х300), вдруг я захотел рахвернуть окно, примет ли картинка оригинальные размеры.
← →
Rouse_ © (2014-11-05 21:29) [9]
> И еще раз И если поможите, бегу ипереди паровоза
Не помогу. Причина проста - ты скомкал все в одну кучу.
← →
M.A. (2014-11-05 21:34) [10]Очень жаль. Спасибо.
← →
M.A. (2014-11-05 22:27) [11]Может, хоть чем нибудь поможете?
← →
Jeer © (2014-11-05 23:00) [12]см [1]
← →
Kilkennycat © (2014-11-05 23:35) [13]Ты уже прочитал книгу, которую я советовал? Не получится так программировать, спрашивая на форумах отдельные элементы, не понимая ничего фундаментального.
← →
M.A. (2014-11-05 23:47) [14]
> Kilkennycat © (05.11.14 23:35) [13]
> Ты уже прочитал книгу
Начал. Но очень не удобно, что на языке С.
← →
Kilkennycat © (2014-11-06 18:03) [15]Наоборот. Использование винапи предполагает частое обращение к msdn, а там все на си.
← →
DQ (2014-11-07 12:48) [16]Вы уверены что правильно понимаете "Static"? Image1 это не статик, это не оконный компонент.
А дочернее окно с классом Static в WinApi принимает HBITMAP. Нужно конвертировать картинку в bmp и всовывать в окно. На чистом WinApi без GDI+ не выйдет.
← →
M.A. (2014-11-08 14:12) [17]Здравствуйте. А где можно достать GDI+ для delphi 2010?
← →
DQ (2014-11-08 17:42) [18]Насколько знаю (хотя я изучал вопрос много лет назад) официальных для Делфи нету, есть некоторое количество проектов по переводу заголовочников/классов.
Если нужно только чисто для конвертации картинки из/в jpg - то можно экспортировать нужные функции и использовать так.
А вообще в Яндекс вбить "GDIPlus Delphi Headers" и найдётся. ):3
← →
M.A. (2014-11-08 18:14) [19]
> DQ
Нашел. Разбираюсь.
← →
M.A. (2014-11-09 16:28) [20]Получилось, с использованием пока только ActiveX.
← →
M.A. (2014-11-09 21:19) [21]А можно ли, из TMemoryStream достать картинку с помощью GDI+?
← →
jack128 © (2014-11-09 21:56) [22]msdn.microsoft.com/en-us/library/windows/desktop/ms535410(v=vs.85).aspx
← →
DQ (2014-11-10 01:15) [23]На ActiveX это кем там?
← →
M.A. (2014-11-13 17:02) [24]
> DQ (10.11.14 01:15) [23]
> На ActiveX это кем там?
OleLoadPicture
← →
M.A. (2014-11-16 21:31) [25]Здравствуйте. Достать из файла и отобразить в 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-16 21:36) [26]Подскажите пожалуйста как расчитать пропорции, если ширина или высота картинки больше ширины или высоты Statica.
Если картинка меньше, то все ОК.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2016.07.24;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.006 c