Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2016.07.24;
Скачать: CL | DM;

Вниз

Помогите переписать с 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.013 c
15-1442611639
DayGaykin
2015-09-19 00:27
2016.07.24
Помощник игры в Сапера.


4-1276949849
ParamPam
2010-06-19 16:17
2016.07.24
Перехватить wm_timer


15-1447240616
AndrewAndrey
2015-11-11 14:16
2016.07.24
Права доступа WinServer2012r2


15-1442241297
timokhasarov
2015-09-14 17:34
2016.07.24
Access ошибка доступа к программе


15-1444937959
Кто б сомневался
2015-10-15 22:39
2016.07.24
CSS. Увеличение картинки при наведении мыши на превью