电
电暖气
Unregistered / Unconfirmed
GUEST, unregistred user!
请帮忙解决一个问题:jpg压缩过程中一个不理解的问题?
就是在压缩处理后,没有保存压缩后jpeg文件到硬盘前。我没能实现显示压缩后的jpeg图象
在image2上显示。而显示的仍然是压缩前的图象。
因为我想通过调整一个控件TrackBar1.Position滑块的位置[实际上就是调整一个压缩的值]
来实时观看压缩图象的效果,而在此之前我不想每调整一下滑块的位置就保存压缩后的图象
文件。只有认为压缩合适了才可保存。
使用的方法是用流
程序如下:[如有高人,请回答,另外给加分]
procedure TForm1.Button4Click(Sender: TObject);
var
ms1:TMemoryStream;
ms2:TMemoryStream;
jpgstream:TJPEGImage;
bmpstream:Tbitmap;
w_jpg_Length:word; //放置原来没压缩jpeg的文件大小
begin
//---2---初始化
ms1:=TMemoryStream.Create;
ms2:=TMemoryStream.Create;
jpgstream:= TJPEGImage.Create;
bmpstream:=Tbitmap.Create;
//---3---得出原始要压缩文件的大小尺寸-->w_jpg_Length
ms1.clear;
ms1.Position:=0;
ms1.LoadFromFile('C:/My Documents/0008.jpg');
w_jpg_Length :=ms1.Size;
//Edit1.Text :=inttostr(w_jpg_Length);
//---4---
jpgstream.LoadFromFile('C:/My Documents/0008.jpg');
bmpstream.Assign(jpgstream);
//开始压缩,压缩质量的值随滑块变化而变化[范围是1--100,默认=7]
//jpgstream.CompressionQuality:=TrackBar1.Position;
jpgstream.CompressionQuality:=7;
jpgstream.Compress;
//---x---得到压缩后的实际尺寸大小
ms2.Clear;
ms2.Position:=0;
jpgstream.SaveToStream(ms2);
w_jpg_Length :=ms2.Size;
Edit2.Text :=inttostr(w_jpg_Length);
//---x+1---将压缩后的图象显示在image2上[理论是这样想的]
bmpstream.Assign(jpgstream); //此时此刻已经压缩完毕
Image2.Picture.Bitmap.Assign(jpgstream); //实际显示的仍然是没压缩的图象??????why????
//
//---x+2--将压缩后的jpeg文件保存在C:/0008bak.jpg
jpgstream.SaveToFile('C:/0008bak.jpg');
//---x+3---释放资源
bmpstream.free;
jpgstream.free;
ms2.free;
ms1.free;
end;
就是在压缩处理后,没有保存压缩后jpeg文件到硬盘前。我没能实现显示压缩后的jpeg图象
在image2上显示。而显示的仍然是压缩前的图象。
因为我想通过调整一个控件TrackBar1.Position滑块的位置[实际上就是调整一个压缩的值]
来实时观看压缩图象的效果,而在此之前我不想每调整一下滑块的位置就保存压缩后的图象
文件。只有认为压缩合适了才可保存。
使用的方法是用流
程序如下:[如有高人,请回答,另外给加分]
procedure TForm1.Button4Click(Sender: TObject);
var
ms1:TMemoryStream;
ms2:TMemoryStream;
jpgstream:TJPEGImage;
bmpstream:Tbitmap;
w_jpg_Length:word; //放置原来没压缩jpeg的文件大小
begin
//---2---初始化
ms1:=TMemoryStream.Create;
ms2:=TMemoryStream.Create;
jpgstream:= TJPEGImage.Create;
bmpstream:=Tbitmap.Create;
//---3---得出原始要压缩文件的大小尺寸-->w_jpg_Length
ms1.clear;
ms1.Position:=0;
ms1.LoadFromFile('C:/My Documents/0008.jpg');
w_jpg_Length :=ms1.Size;
//Edit1.Text :=inttostr(w_jpg_Length);
//---4---
jpgstream.LoadFromFile('C:/My Documents/0008.jpg');
bmpstream.Assign(jpgstream);
//开始压缩,压缩质量的值随滑块变化而变化[范围是1--100,默认=7]
//jpgstream.CompressionQuality:=TrackBar1.Position;
jpgstream.CompressionQuality:=7;
jpgstream.Compress;
//---x---得到压缩后的实际尺寸大小
ms2.Clear;
ms2.Position:=0;
jpgstream.SaveToStream(ms2);
w_jpg_Length :=ms2.Size;
Edit2.Text :=inttostr(w_jpg_Length);
//---x+1---将压缩后的图象显示在image2上[理论是这样想的]
bmpstream.Assign(jpgstream); //此时此刻已经压缩完毕
Image2.Picture.Bitmap.Assign(jpgstream); //实际显示的仍然是没压缩的图象??????why????
//
//---x+2--将压缩后的jpeg文件保存在C:/0008bak.jpg
jpgstream.SaveToFile('C:/0008bak.jpg');
//---x+3---释放资源
bmpstream.free;
jpgstream.free;
ms2.free;
ms1.free;
end;