Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
6-1281178432
syserg
2010-08-07 14:53
2016.07.24
Защита участка кода HTML


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


15-1441698420
Cobalt
2015-09-08 10:47
2016.07.24
http://www.delphimaster.net/view/1-1128652349


2-1415727709
Mimikron
2014-11-11 20:41
2016.07.24
DBGrid, скроллинг


2-1412950706
AntonArm
2014-10-10 18:18
2016.07.24
Xe7 и Thread





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский