GUID下载转换并显示各种格式图片,看看哪里错了
- Delphi(Pascal) code
procedure TForm1.Button1Click(Sender: TObject);var Stream: IStream; ImgGUID: TGUID; img: TGPImage; memoStream, OleStream: TStream;begin //将图片下载保存为TmemoryStream memoStream := TMemoryStream.Create; try {这个是图片URL} IdHTTP1.Get(Edit1.text, memoStream); memoStream.Position := 0; //将TmemoryStream转成IStream Stream := TStreamAdapter.Create(memoStream); img := TGPImage.Create(Stream); Repaint; GetEncoderClsid('image/jpeg', ImgGUID); img.Save('H:\1.jpg', ImgGUID);//这里正常 img.Save(Stream, ImgGUID); //将IStream转成OleStream OleStream := TOleStream.Create(Stream); Image1.Picture.Bitmap.LoadFromStream(OleStream); except memoStream.Free; end;end;[解决办法]
- Delphi(Pascal) code
// 引用 jpeg 单元procedure TForm1.Button1Click(Sender: TObject);var Stream: IStream; ImgGUID: TGUID; img: TGPImage; jpg: TJpegimage; memoStream, OleStream: TStream; b: word;begin //将图片下载保存为TmemoryStream memoStream := TMemoryStream.Create; try {这个是图片URL} IdHTTP1.Get(Edit1.text, memoStream);{ memostream.Position:= 0; memoStream.Read(b,2); if b=$4d42 then showmessage('bmp'); if b=$d8ff then showmessage('jpg'); if b=$4947 then showmessage('gif'); if b=$5089 then showmessage('png'); } memoStream.Position := 0; //将TmemoryStream转成IStream Stream := TStreamAdapter.Create(memoStream); img := TGPImage.Create(Stream); Repaint; GetEncoderClsid('image/jpeg', ImgGUID); img.Save('1.jpg', ImgGUID); img.Save(Stream, ImgGUID);// 将IStream转成OleStream// OleStream := TOleStream.Create(Stream);// Image1.Picture.Bitmap.LoadFromStream(OleStream); memostream.Position:= 0; jpg:= TJpegimage.Create; jpg.LoadFromStream(memoStream); Image1.Picture.Assign(jpg); jpg.Free; except memoStream.Free; end;end;