Image 压缩图像(bmp到jpg)的过程

Image 压缩图像(bmp到jpg)的过程,image,delphi,compression,delphi-7,procedure,Image,Delphi,Compression,Delphi 7,Procedure,此代码编译时没有错误,但生成的映像包含0字节。有人能帮我吗 以下是转换图像的步骤: procedure CompressImage(ImageFrom: TBitmap; ImageTo: TJPEGImage; Quality: integer); var bmp: TBitmap; jpeg: TJPEGImage; stream: TMemoryStream; begin bmp:=TBitmap.Create; jpeg:=TJPEGImage.Create; s

此代码编译时没有错误,但生成的映像包含0字节。有人能帮我吗

以下是转换图像的步骤:

procedure CompressImage(ImageFrom: TBitmap; ImageTo: TJPEGImage; Quality: integer);
var
  bmp: TBitmap;
  jpeg: TJPEGImage;
  stream: TMemoryStream;
begin
  bmp:=TBitmap.Create;
  jpeg:=TJPEGImage.Create;
  stream:=TMemoryStream.Create;
  try
    bmp.Assign(ImageFrom);
    jpeg.Assign(bmp);
    jpeg.PixelFormat:=jf24bit; // or jf8bit
    jpeg.CompressionQuality:=Quality;
    jpeg.ProgressiveDisplay:=False;
    jpeg.ProgressiveEncoding:=False;

    jpeg.Compress;
    jpeg.SaveToStream(stream);
    ImageTo.LoadFromStream(stream);
  finally
    bmp.Free;
    jpeg.Free;
    stream.Free;
  end;
end;
我这样称呼它:

procedure TForm1.FormCreate(Sender: TObject);
var
  imageBMP: TBitmap;
  imageJPG: TJPEGImage;
begin
  imageBMP:=TBitmap.Create;
  imageJPG:=TJPEGImage.Create;
  imageBMP.LoadFromFile('image.bmp');
  CompressImage(imageBMP, imageJPG, 50);
  imageJPG.SaveToFile('image.jpg');
  imageBMP.Free;
  imageJPG.Free;
end;

“image.jpg”文件是用0字节生成的。

在压缩映像过程中,应添加以下行:

stream.Position := 0;
其间:

jpeg.SaveToStream(stream);
ImageTo.LoadFromStream(stream);
使其内容如下:

jpeg.SaveToStream(stream);
stream.Position := 0;
ImageTo.LoadFromStream(stream);

这是因为当您将jpeg保存到流时,流指针的当前“位置”或位置位于jpeg数据的末尾。因此,当您调用ImageTo.LoadFromStream时,它将从保存jpeg后的流中的点开始读取流。将Position属性设置为0会告诉流指针从“开始”开始

尝试添加行流。位置:=0;介于jpeg.SaveToStream(stream)和ImageTo.LoadFromStream(stream)WOWWWWW之间!!!!谢谢杰森!!!工作!“太本地化”关闭选项在哪里?已经移除了吗?不太可能有人会发现这个问题在将来有用,因为标题和问题与实际问题无关。这个问题似乎是离题的,因为它是关于一个bug的,将来没有用处。这个问题应该保持开放!OP询问为什么有些东西不工作,提供了代码,并证明是可以回答的。OP的代码中有一个bug这一事实并不是关闭的理由。(这里有很多问题是关于你知道的bug的。这就是我们来这里的原因:寻找帮助。)