JPEG控件压缩图像的使用(100分)

  • 主题发起人 主题发起人 tsedlinux
  • 开始时间 开始时间
T

tsedlinux

Unregistered / Unconfirmed
GUEST, unregistred user!
用JPEG方法将BMP图片压为JPG文件时,需要用很多时间,如
jpg:=tjpegimage.Create;
jpg.Assign(bitmap);
jpg.CompressionQuality:=jpg_compress_level;//压缩质量
jpg.Compress; <---------------------------------------------------((1))
jpg.SaveToStream(dest_stream); //将JPG图象写入流中 <-------------((2))
dest_stream.Position:=0; //重定位

上面的1、2两处在处理时很费时间,在程序中会产生0.5~1秒的停顿,但这两步是必须的,而且我也试过用线程做,但结果仍然一样,不知道各位兄弟有什么好方法吗?
我希望程序在图像的处理上用时越少越好 望大家鼎力相助
 
程序中会产生0.5~1秒的停顿!
要想避免上面的现象,只能使用多线程来解决,使用多线程只是在程序外观上看来不在占用时间,但实际仍然会用这么长的时间只是在后台,如果你用线程后仍然等待它完成后再做一些其它的处理的话,用线程也是不能解决问题的。只能等待。
 
参考一下这些代码??
///Bitmap 和 JPEG 格式间的快速转换
function Bmp2Jpg(Bmp: TBitmap; Quality: Integer = 100): TJpegImage;
begin
Result := nil;
if Assigned(Bmp)
then begin
Result := TJpegImage.Create;
Result.Assign(Bmp); {It′s all folks...}
Result.CompressionQuality := Quality;
Result.JPEGNeeded; {Key method...}
Result.Compress;
end;
end;
function Jpg2Bmp(Jpg: TJpegImage): TBitmap;
begin
Result := nil;
if Assigned(Jpg)
then begin
Result := TBitmap.Create;
Jpg.DIBNeeded; {Key method...}
Result.Assign(Jpg); {It′s all folks...}
end;
end;
 
to 风铃
我用线程试着做这段代码 可结果也是一样的停顿,它的停顿表现为鼠标在桌面上移动时每隔大约6--7秒就会产生一个停顿,间隔的时间与其它相关代码有关。
不知道是不是还有什么方法呢?
还有JPG存储到流中时也会出现停顿 =(

 
TO APP2001
请问有没有效率更高的图像压缩处理方法呢 用COMPRESS进行处理占资源太多了
=(
谢谢你的代码 =)
 
合理利用线程,应该会改善的。检查一下自己的流程
 
实在报歉,我手头上有的资料已全部给你了。
 
每隔大约6--7秒!
这时你可以看一下CPU的利用率,可能已经达到100%了,看看是不是你的程序占用的?
另外你使用的是JPEG毛纺厂方的控件,它内部是怎么实现的就不清楚了,是不是和这有关,也说不定!
 
是已经满了 完全是在图形处理时被占用的
 
这说明在jpg.Compress;等数据处理语句中cpu的占用率太高了,这是和JPEG组件有关的,可能没法控件了,如果非要想提高系统对其它事件的响应,可以将数据处理线程的优先级降低。
 
jpg:=tjpegimage.Create;
jpg.CompressionQuality:=100;
jpg.Assign(bitmap);
jpg.SaveToStream(dest_stream);
dest_stream.Position:=0;
就这么几句话行吗?

 
to ZHOUFUJIN
程序当然不止这几行代码啦 只是和我问题相关的东东啊
 
我想应该找一找ActiveX控件来试一试
 
后退
顶部