Форум: "Начинающим";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
ВнизСжатие картинки Найти похожие ветки
← →
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);
(с) antonn
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;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c