Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.01;
Скачать: CL | DM;

Вниз

Сжатие картинки   Найти похожие ветки 

 
vitaliy14   (2005-12-13 14:25) [0]

Здравствуйте! Мне необходимо изображение TBitmap размеров (heigth, width).
сжать до размеров (heigth/4, width/4). То есть по-русски говоря, исходную картинку уменьшить картинку в четыре раза (по масштабу)!

Кто-нибудь может, пожалуйста, выложить аналогичный пример (или подробный алгоритм, если примера нет) уменьшения картинки?

зы просто задача может и банальная, но на дельфи начал писать недавно и сроки поджимают, поэтому самому изобретать по новому велосипед нет времени!  Заранее спасибо


 
clickmaker ©   (2005-12-13 14:29) [1]

св-во Stretch


 
vitaliy14   (2005-12-13 14:41) [2]


> св-во Stretch


есть пример какой? а картинка не будет искажаться?

зы я просто читал, что  Stretch больше подходит для каких-то узоров, а мне нужно работатать с фотографией(так чтобы не допустить ее искажения или потери информации)


 
Antonn ©   (2005-12-13 16:15) [3]

vitaliy14   (13.12.05 14:41) [2]
так чтобы не допустить ее искажения или потери информации)


> сжать до размеров (heigth/4, width/4).

как то не стыкуется...

procedure Small4x(Bitmap:Tbitmap);
const
 PixelsCount = MaxInt div SizeOf(TRGBTriple);
type
 PRGBArray = ^TRGBArray;
 TRGBArray = array[0..PixelsCount-1] of TRGBTriple;
var i,x,y,cx,cy,cxi,DestR,DestG,DestB:Integer;
 Row1,Row2,Row3,Row4,DestRow:PRGBArray;
 _tmpBitmap:Tbitmap;
begin
 _tmpBitmap:=Tbitmap.Create;
 try
 _tmpBitmap.Width:=Bitmap.Width;
 _tmpBitmap.Height:=Bitmap.Height;
 BitBlt(_tmpBitmap.Canvas.Handle,0,0,_tmpBitmap.Width,_tmpBitmap.Height,Bitmap.Canvas.Handle,0,0,SRCCOPY);
 _tmpBitmap.PixelFormat:=pf24bit;
 Bitmap.PixelFormat:=pf24bit;
 Bitmap.Width:=Bitmap.Width div 4;
 Bitmap.Height:=Bitmap.Height div 4;

 Row2:=nil; Row3:=nil; Row4:=nil;
 for y:=0 to Bitmap.Height-1 do begin
   cy:=y*4;
   Row1:=_tmpBitmap.ScanLine[cy];
   Row2:=_tmpBitmap.ScanLine[cy+1];
   Row3:=_tmpBitmap.ScanLine[cy+2];
   Row4:=_tmpBitmap.ScanLine[cy+3];
   DestRow := Bitmap.ScanLine[y];
   for x:=0 to Bitmap.Width - 1 do begin
     cx:=x*4;
     DestR:=0; DestG:=0; DestB:=0;
       for i:=0 to 3 do begin
         cxi:=cx+i;
         DestR:=DestR + Row1[cxi].rgbtRed + Row2[cxi].rgbtRed + Row3[cxi].rgbtRed + Row4[cxi].rgbtRed;
         DestG:=DestG + Row1[cxi].rgbtGreen + Row2[cxi].rgbtGreen + Row3[cxi].rgbtGreen + Row4[cxi].rgbtGreen;
         DestB:=DestB + Row1[cxi].rgbtBlue + Row2[cxi].rgbtBlue + Row3[cxi].rgbtBlue + Row4[cxi].rgbtBlue;
       end;
       DestRow[x].rgbtRed:=DestR div 16;
       DestRow[x].rgbtGreen:=DestG div 16;
       DestRow[x].rgbtBlue:=DestB div 16;
   end;
 end
 finally
  _tmpBitmap.Free;
 end;
end;
(с) antonn



Страницы: 1 вся ветка

Текущий архив: 2006.01.01;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.04 c
11-1116038421
uli
2005-05-14 06:40
2006.01.01
разрешение экрана


1-1133525387
Alexandr
2005-12-02 15:09
2006.01.01
настройка видимости контрлов в программе


5-1119509948
Другой Дмитрий
2005-06-23 10:59
2006.01.01
Мне необходимо отследить переименование проекта, для чего...


9-1122506838
Алгоритм
2005-07-28 03:27
2006.01.01
Самосборка паззлов Возможна ли ?


14-1133859033
Unknowing
2005-12-06 11:50
2006.01.01
Сектор Delphi