JPG文件压缩后读取问题 ( 积分: 50 )

  • 主题发起人 主题发起人 miaoyuli
  • 开始时间 开始时间
M

miaoyuli

Unregistered / Unconfirmed
GUEST, unregistred user!
程序读取JPG文件,进行压缩后通过Timage控件显示出来,我目前的实现代码如下,但是在压缩后转成BMP准备读入Timage控件之前报错“JPEG error #41”,请问应如何修改?
var
fromImage:TImage;
tmpJpeg:TJPEGImage;
tmpBitmap:TBitmap;
MemStr:TMemoryStream;
begin
MemStr:=TMemoryStream.Create;
MemStr.Clear;
MemStr.LoadFromFile('c:/1.jpg');
MemStr.Seek(0,0);

tmpjpeg:=TJPEGImage.Create;
tmpjpeg.LoadFromStream(MemStr);
tmpjpeg.CompressionQuality := 5;
//tmpjpeg.JPEGNeeded;
tmpjpeg.Compress;
//tmpjpeg.DIBNeeded;

tmpBitmap:=TBitmap.Create;
tmpBitmap.Assign(tmpjpeg); //执行此步时报错
tmpBitmap.SaveToFile('c:/1.bmp');

fromImage:=TImage.Create(nil);
fromImage.Stretch:=false;
fromImage.AutoSize:=true;
fromImage.Picture.LoadFromFile('c:/1.bmp');
Image1.Picture.Assign(fromImage.Picture);
MemStr.free;
tmpjpeg.Free;
tmpBitmap.Free;
fromImage.Free;
end;
 
程序读取JPG文件,进行压缩后通过Timage控件显示出来,我目前的实现代码如下,但是在压缩后转成BMP准备读入Timage控件之前报错“JPEG error #41”,请问应如何修改?
var
fromImage:TImage;
tmpJpeg:TJPEGImage;
tmpBitmap:TBitmap;
MemStr:TMemoryStream;
begin
MemStr:=TMemoryStream.Create;
MemStr.Clear;
MemStr.LoadFromFile('c:/1.jpg');
MemStr.Seek(0,0);

tmpjpeg:=TJPEGImage.Create;
tmpjpeg.LoadFromStream(MemStr);
tmpjpeg.CompressionQuality := 5;
//tmpjpeg.JPEGNeeded;
tmpjpeg.Compress;
//tmpjpeg.DIBNeeded;

tmpBitmap:=TBitmap.Create;
tmpBitmap.Assign(tmpjpeg); //执行此步时报错
tmpBitmap.SaveToFile('c:/1.bmp');

fromImage:=TImage.Create(nil);
fromImage.Stretch:=false;
fromImage.AutoSize:=true;
fromImage.Picture.LoadFromFile('c:/1.bmp');
Image1.Picture.Assign(fromImage.Picture);
MemStr.free;
tmpjpeg.Free;
tmpBitmap.Free;
fromImage.Free;
end;
 
没有明白你的用意
这样行不?
Var
JPEGImage: TJPEGImage;
begin
DoubleBuffered:=true;
//先读入jpeg格式的图片
JPEGImage := TJPEGImage.Create;
JPEGImage.LoadFromFile('你的jpg文件');
Image1.Picture.Bitmap.Assign(JPEGImage);
JPEGImage.Free;
end;
 
我的目的主要是要先实现对JPG图像的压缩,然后再显示。也就是上面语句中的
tmpjpeg.CompressionQuality := 5;
这个5实际上是个参数,可以用来调整图像的压缩比。
 
直接fromimage.assign(tmpjpeg)
 
to gangp:
按照你的方法,运行到那句话提示:
“Cannot assign a TJPEGImage to a TImage”
我的DELPHI版本是5。
 
贴自:http://www.delphiuser.com/faq/browser.asp?classID=64

如果你使用Delphi4,注意到它的TImage支持的文件格式可以为*.Jpg,*.Jpeg,*.bmp,*.ico……这个问题将很好解决!
下面是源代码:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
procedure TForm1.Button1Click(Sender: TObject);
(*压缩MBP为JPEG;但是没有提供压缩比可选项
凑合用吧,大概1/3 ^_^:
Note:必须加上JPEG到Uses单元
*)
var
MyJPEG : TJPEGImage;
MyBMP : TBitmap;
begin
MyBMP := TBitmap.Create;
with MyBMP do
try
LoadFromFile('e:/lm.BMP'); //你的图片位置
MyJPEG := TJPEGImage.Create;
with MyJPEG do begin
Assign(MyBMP);
CompressionQuality:=10; //压缩比例
Compress;
SaveToFile('e:/lm01.JPEG');//保存路径……
Free;
end;
finally
Free;
end;
end;
 
TO 寻路
我可能还是没把我的目的说清楚。我现在想对JPG图像通过参数来控制压缩,并将压缩后的结果显示出来。也就是我随意给个压缩比,那么原始JPG文件应按照这个压缩比显示出来。
你所举的那个例子是BMP转JPG的压缩。
 
后退
顶部