2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Сжатие картинки. (на Делфи)
Сообщение22.12.2009, 14:14 
Пытаюсь сжать картинку по горизонтали - коэффициент сжатия 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 сообщение ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group