Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

GDI+ Подскажите пожалуйста, как расчитать пропорции изображения.


M.A. ©   (2014-11-19 18:04:00) 

Здравствуйте. Достать из файла и отобразить в Static получилось.
Кооринаты верхнего левого угла картинки, при изменение размера картинки и Statica, определяются правильно. Только картинка пропадает, прихотитсь заново перерисовывыть после изменения размера 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-22 21:27:00) [1]

Получилось. Только вот при изменение размеров, мерцают Editы. Как исправить?


M.A.   (2014-11-22 02:43:00) [2]


> Endy   (20.11.14 10:35) [4]
> Здесь не видно что вы делаете при WM_PAINT и откуда вызываете
> getPicture().

Вызывается по клику по ListView.
Вот и думаю как организовать рсование при изменение размера Statica.


Endy   (2014-11-20 10:35:00) [3]

Здесь не видно что вы делаете при WM_PAINT и откуда вызываете getPicture().
В любом случае нужно вовремя вызывать Repaint, иначе бы не затиралось.


KilkennyCat   (2014-11-19 23:18:00) [4]

Static - это чегось?


M.A.   (2014-11-19 21:13:00) [5]

А как сдеать, чтоб ы нарисованное не проподало при изменение размера Statica?


M.A.   (2014-11-19 20:14:00) [6]

Нашел. решение

float srcwidth = source.Width;
       float srcheight = source.Height;
       float dstwidth = width;
       float dstheight = height;

       if (srcwidth


Наверх

Титульная страница Поиск, карта сайта Написать письмо