![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Использую Dephi2007. Изображения в отличном качестве, но когда загружаю их в Timage, используя Propirtianal:=true; что бы маштабировать в уменьшеном размере, они как то преобразуються странно и выглядят совсем не очень,причем некоторые отображаються без потери качества, другие же пикселяться что-ли. Перепробывал все параметры которые только нашёл, но разобраться не получаеться. Может, кто знает как уменьшать картинки на форме не теряя качества.
![]() |
|
#2
|
|||
|
|||
|
Используй GDI функции StretchBlt и SetStretchBltMode для качественного ресайза либо библиотеки GDI+, FastDIB, GraphicEx, Graphics32.
|
|
#3
|
|||
|
|||
|
Цитата:
Тут оказываеться целая наука! |
|
#4
|
|||
|
|||
|
Ребята, я непробиваемый, посмотрел эти функции но никак не могу связать. Там одна для библиотека для больших картинок от 300 на 300 пикс GDI+ называеться, а у меня меньше изображениянемного. StretchBlt и SetStretchBltMode я так понял для canvas,а у меня TImage. Вот как применить StretchBlt TImage никак не получаеться найти.
|
|
#5
|
||||
|
||||
|
Код:
TImage.Canvas |
|
#6
|
|||
|
|||
|
пример:
Код:
procedure resize_img(img: TImage; nx, ny: integer);
var
t: TBitmap;
h: THandle;
scale: double;
begin
if img.Proportional then begin
scale:=max(img.Height/ny, img.Width/nx);
if scale<1 then scale:=1;
nx:=trunc(img.Width/scale);
ny:=trunc(img.Height/scale);
end;
t:=TBitmap.Create;
t.Assign(img.Picture.Graphic);
t.PixelFormat:=pf24bit;
h:=t.Canvas.Handle;
SetStretchBltMode(h, HALFTONE);
StretchBlt(h, 0,0,nx,ny, h, 0,0,t.Width,t.Height, SRCCOPY);
t.Width:=nx;
t.Height:=ny;
img.Picture.Assign(t);
t.Free;
end; |