|
|
kahey |
Сжатие картинки. (на Делфи) 22.12.2009, 14:14 |
|
Заблокирован |
|
05/07/09 ∞ 265 Рязань
|
Пытаюсь сжать картинку по горизонтали - коэффициент сжатия 60%. Однако в результате получается полосатая картинка. Не пойму где ошибка. Подскажите что не так в алгоритме.
x1:=image1.Picture.Width; x2:=x1*i1 div 100; y1:=image1.Picture.Height; y2:=y1*i2 div 100; image4.Picture:=image3.Picture; image4.Width:=x2; image4.Height:=y1; for j:=0 to y1 do begin ii1:=0; s11:=0; s21:=0; s31:=0; s12:=0; s22:=0; s32:=0; d:=0; for i:=0 to x2 do begin ii2:=(i*100+(i1 div 2)) div i1; for ii:=ii1 to ii2 do begin s11:=s11+(image1.Canvas.Pixels[ii,j] mod 256); s21:=s21+((image1.Canvas.Pixels[ii,j] div 256) mod 256); s31:=s31+((image1.Canvas.Pixels[ii,j] div (256*256))); end; if (ii2>=ii1) then begin c1:=((s11*i1+50) div 100)-s12; if c1<0 then c1:=0; if c1>255 then c1:=255; c2:=((s21*i1+50) div 100)-s22; if c2<0 then c2:=0; if c2>255 then c2:=255; c3:=((s31*i1+50) div 100)-s32; if c3<0 then c3:=0; if c3>255 then c3:=255; image4.Canvas.Pixels[i,j]:=c1+c2*256+c3*256*256; s12:=s12+c1; s22:=s22+c2; s32:=s32+c3; ii1:=ii2+1; d:=1; end else begin if i>0 then begin d:=d+1; {d не играет роли, как выяснилось} end else begin s12:=(image1.Canvas.Pixels[0,j] mod 256); s22:=((image1.Canvas.Pixels[0,j] div 256) mod 256); s32:=(image1.Canvas.Pixels[0,j] div (256*256)); image4.Canvas.Pixels[0,j]:=image1.Canvas.Pixels[0,j]; end; end; end; end; image2.Picture:=image4.Picture;
|
|
|
|
|
|
Страница 1 из 1
|
[ 1 сообщение ] |
|
Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы