![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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; | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Спасибо!, отличный пример, только я не разобрался, что это за цикл с условием который в начале процедуры идет, делфи мне подчеркивет в слове max, но впринципе и без этого цикла прекрасно работает! ![]()  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Условие проверяет флаг Proportional у имиджа и подгоняет размеры с учетом пропорций если это требуется, функция max находится в модуле Math. 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Спасибо!!! 
		
	
		
		
		
		
		
	
		
		
	
	
	 |