Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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);
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.009 c
2-1134549152
Daria
2005-12-14 11:32
2006.01.01
dbcombobox


1-1133516129
Igor_thief
2005-12-02 12:35
2006.01.01
Окно встроенное в окно


14-1134099061
AndreyM
2005-12-09 06:31
2006.01.01
Почему Microsoft отказалась от Паскаля?


5-1119962835
harisma
2005-06-28 16:47
2006.01.01
Как сделать хинты для TTreeNode в TTreeView


4-1130437729
Erl
2005-10-27 22:28
2006.01.01
Bitmap





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский