Delphi 如何处理原始jpeg数据

Delphi 如何处理原始jpeg数据,delphi,jpeg,Delphi,Jpeg,我有通过web请求检索的JPG数据。此外,buf中的字节数与JPG文件中的字节数相同。我想在TStream中加载这些数据,或者更好地在TBitmap中加载 // here are JPG data from http request in string property "UnparsedParams" buf:=PChar(ARequestInfo.UnparsedParams); stream:=TMemoryStream.Create; // now I will save it in

我有通过web请求检索的JPG数据。此外,buf中的字节数与JPG文件中的字节数相同。我想在TStream中加载这些数据,或者更好地在TBitmap中加载

// here are JPG data from http request in string property "UnparsedParams"
buf:=PChar(ARequestInfo.UnparsedParams); 
stream:=TMemoryStream.Create;

// now I will save it into local file
stream.Write(Buf^, length(ARequestInfo.UnparsedParams));
stream.SaveToFile(sFile);
stream.Free;

// and now I will load jpg-image from file 
img.imageName:=sFile;
img.Picture.SaveToFile(sFile);

// and now once again will load in dll's procedure to work something with picture
mydll.ReadFromFile(sFile,0);
// ...and I want to use method "ReadFromMemFile" that handle in-memory data
mydll.ReadFromMemFile(<OleVariant>, <Size>, <zero>);
// ...or maybe better method ReadFromBitmap that handle with Bitmap's handle
mydll.ReadFromBitmap(<bitmap handle> <zero>);

将数据传输到流:

var
  ms: TMemoryStream;
....
ms := TMemoryStream.Create;
ms.Write(Buf^, length(ARequestInfo.UnparsedParams));
然后将该流加载到图像中:

ms.Position := 0;
jpeg := TJpegImage.Create;
jpeg.LoadFromStream(ms);
img.Picture.Assign(jpeg);
如果要传输到位图,请执行以下操作:

var
  bmp: TBitmap;
....
bmp := TBitmap.Create;
bmp.Assign(jpeg);
要使所有这些都起作用,必须在uses子句中包含jpeg单位

我不确定你问题的最后部分,关于你的DLL的那部分是否相关


FWIW,如果您希望保存到文件,则不需要中间内存流。创建一个TFileStream并直接写入。

@David Heffernan:由于某种原因,将流加载到TJpegImage对象时出错。错误53。我希望避免使用文件系统,以节省时间,并最终导致读/写失败。错误53意味着您有一个JPEG代码无法处理的JPEG文件。您可能需要找到另一个库。我相信如果你对错误信息进行网络搜索,你会在这方面找到很多帮助。如果您的问题是关于错误53,为什么要等到现在才提到它。我发现了以前所有的错误…只需要获取位图的句柄…现在是img.Picture.Bitmap.handle=0。怎么办?您的图片保存的是jpeg图像,而不是windows位图。根据我的答案转移到TBitmap并读取其句柄。为什么你要用TImage来做非可视代码。这是因为我有一个服务器应用程序,可以检索图像,显示图像,处理任何事情。只是为了视觉展示。。。。和其他应用程序相同,但作为服务运行。另一个当然不包含任何wisual控件。。。不过,谢谢你的帮助。