![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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