如何处理原始jpeg数据

时间:2014-08-12 10:39:52

标签: delphi jpeg

我有通过网络请求检索的JPG数据。此外,在“buf”中,与J​​PG文件中的字节相同。我想在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>);

1 个答案:

答案 0 :(得分:2)

将数据传输到流:

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);

要使所有这些工作正常,您必须在jpeg条款中加入uses单元。

我不确定您问题的最后部分的相关性或其他方面,关于您的DLL的部分。

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