为什么图片尺寸改小后反而文件变大了? ( 积分: 100 )

  • 主题发起人 主题发起人 寂寞的鸭子
  • 开始时间 开始时间

寂寞的鸭子

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了个程序将jpg图片由原来的2304×1728改成800×600,但是文件大小怎么由原来的700多K变成了1.8M?谁能告诉我这是为什么?代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i := 0 to FileStr.Count - 1 do
begin
Image1.Parent.DoubleBuffered := True;
Image1.Picture.LoadFromFile(FileStr);--FileStr是选取的要转换的图片文件名
Image2.Height := 600;
Image2.Width := 800;
Image2.Canvas.StretchDraw(Image2.ClientRect,Image1.Picture.Graphic);
Image2.Picture.SaveToFile('E:/图片/' + ExtractFileName(FileStr));
end;
end;
 
我写了个程序将jpg图片由原来的2304×1728改成800×600,但是文件大小怎么由原来的700多K变成了1.8M?谁能告诉我这是为什么?代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i := 0 to FileStr.Count - 1 do
begin
Image1.Parent.DoubleBuffered := True;
Image1.Picture.LoadFromFile(FileStr);--FileStr是选取的要转换的图片文件名
Image2.Height := 600;
Image2.Width := 800;
Image2.Canvas.StretchDraw(Image2.ClientRect,Image1.Picture.Graphic);
Image2.Picture.SaveToFile('E:/图片/' + ExtractFileName(FileStr));
end;
end;
 
jpg本身是压缩过的格式,本来就比bmp小,你转换后保存的文件是bmp格式,自然而然大了。可以用TJpeg图像对象再转换保存成jpg格式,应该就不算太大了。不过,TJpeg对象没有PhotoShop那样强大的压缩功能,可能转换后还是会比你的2304x1728的图片稍微大或者大小相当的情况。
 
我没有转换成bmp格式啊,还是jpg文件
 
前后可能使用了不同的压缩比例和压缩算法
 
我只有上面那段代码是处理图像的,你是说Delphi自己处理的吗?
 
TImage.Picture 的默认格式为 TBitmap(看看 TImage 的 GetCanvas 方法),
就是说你在 Image2.Canvas.StretchDraw 这一句的时候,它已经帮你生成了一个 TBitmap,
你所说的“我没有转换成bmp格式啊,还是jpg文件”只是指文件后缀名而己,其实质就是一个 BMP。
 
在代码转换过程中,delphi是生成Bmp格式图像来处理的。
 
后退
顶部