急!如何把一bitmap图象数据保存为olevariant变量(byte数组) 如果解决分可再加(100分)

  • 主题发起人 主题发起人 starflying
  • 开始时间 开始时间
S

starflying

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把一bitmap图象数据保存为olevariant变量(byte数组)
 
Tbitmap.savetostream 先保存到流
然后怎么处理我还在试
 
提供一段vc的代码作为参考:
//输出数据
SAFEARRAY* psa;
SAFEARRAYBOUND rgBound[1];
rgBound[0].lLbound = 0;
rgBound[0].cElements = dwDibSize - sizeof(BITMAPINFOHEADER) - nPaletteEntries * sizeof(RGBQUAD)
+ sizeof(DATATYPE);

psa = SafeArrayCreate(VT_UI1, 1, rgBound);

memcpy(psa->pvData, &DataType, sizeof(DATATYPE));
memcpy((unsigned char*)psa->pvData + sizeof(DATATYPE),
pDibBits,
dwDibSize - sizeof(BITMAPINFOHEADER) - nPaletteEntries * sizeof(RGBQUAD));

vtGreyData->vt = VT_ARRAY|VT_UI1;
vtGreyData->parray = psa;
 
procedure VariantToStream(const Data: OleVariant; Stream: TStream);
var
p: Pointer;
begin
p := VarArrayLock(Data);
try
Stream.Write(p^, VarArrayHighBound(Data,1) + 1);
finally
VarArrayUnlock(Data);
end;
end;

function StreamToVariant(Stream: TStream): OleVariant;
var
p: Pointer;
begin
Result := VarArrayCreate([0, Stream.Size - 1], varByte);
p := VarArrayLock(Result);
try
Stream.Position := 0;
Stream.Read(p^, Stream.Size);
finally
VarArrayUnlock(Result);
end;
end;
 
后退
顶部