Главная страница
    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.035 c
2-1134507375
drink
2005-12-13 23:56
2006.01.01
Путь к файлу в TOpenDialog


11-1116359061
AK Delfin
2005-05-17 23:44
2006.01.01
Смена картинок в KOlToolBar


6-1127280679
VadimX
2005-09-21 09:31
2006.01.01
Как проверить анонимность прокси


5-1120549619
Mutex
2005-07-05 11:46
2006.01.01
Найти название свойства для csSubComponent через OpenToolsAPI


2-1134469781
Anton_m
2005-12-13 13:29
2006.01.01
Как найти файлы по маске в сетевых расшаренных папках?





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