我有通过网络请求检索的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>);
答案 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
并直接写入。