Главная страница
    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.45 MB
Время: 0.009 c
2-1134408232
fast2
2005-12-12 20:23
2006.01.01
Как сделать, чтоб в комбобоксе нельзя было вводить с клавиатуры..


1-1133719530
Иевлев Дмитрий
2005-12-04 21:05
2006.01.01
добавить событие для пункта меню


14-1133884089
Torry
2005-12-06 18:48
2006.01.01
Delphi 2006 - Danny Thorpe leaving Borland


4-1129968944
Энтри
2005-10-22 12:15
2006.01.01
Помогите вытащить переменную из структуры


14-1133650015
Piter
2005-12-04 01:46
2006.01.01
Проблема с Miranda





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский