c ++ builder - 显示没有标题的bytearray-color信息

时间:2012-08-19 21:52:49

标签: c++ image bytearray c++builder

我有一个Byte *类型的RGB字节数组。
我可以使用电晕库将其保存到PNG文件中。
但是,我想以某种方式在TImage-Object上显示Bytearray,而不必每次都保存和加载文件...
我已经找到了memorystream的解决方案

Byte* pBuffer;//data
long cbBuffer;//length of data
TMemoryStream *tmem=new TMemoryStream();
tmem->Write(pBuffer,cbBuffer);
TPngImage *saf=new TPngImage();
saf->LoadFromStream(tmem);

然而,由于bytearray没有标题,因此抱怨缺少标题 所以,我考虑创建一个空白图片并在那里绘制像素信息......

Graphics::TBitmap *Bitmap = new Graphics::TBitmap();  
Bitmap->Width = pVih->bmiHeader.biWidth;               
Bitmap->Height = pVih->bmiHeader.biHeight;              
for(int j=0;j<pVih->bmiHeader.biHeight;j++){
    Byte* y=(Byte*) Bitmap->ScanLine[j];
    for(int x=0;x<pVih->bmiHeader.biWidth;x++)
        y[x]=pBuffer[j*pVih->bmiHeader.biWidth+x];
}
Image1->Picture->Graphic=Bitmap;
Application->ProcessMessages();

然而,这仍然是空白。而且我真的不喜欢绘制像素,即使使用更快的ScanLine ......

那么,有人知道如何在TImage-Object中显示Bytearray的颜色吗? 如果有一个整洁的库,你也可以建议它,但我尝试使用pnglib几次,我似乎没有弄清楚如何使用它。
我正在使用Embarcadero的XE2 16中的C ++ Builder。

的问候,
儒略

1 个答案:

答案 0 :(得分:0)

事后看来,可能有必要告诉我收到一张pf24Bit图片......

当然,因为它不是一个而是每个像素3个字节,所以缺少一个因子3:

TBitmap *Bitmap = new TBitmap();  
Bitmap->Width = pVih->bmiHeader.biWidth;              
Bitmap->Height = pVih->bmiHeader.biHeight;
Bitmap->PixelFormat=pf24bit;
for(int j=0;j<Bitmap->Height;j++){
    Byte *y=(Byte*)Bitmap->ScanLine[j];
    for(int x=0;x<Bitmap->Width*3;x++){
        y[x]=pBuffer[j*Bitmap->Width*3+x];
    }
}
Image1->Picture->Bitmap->Assign(Bitmap);

它仍然有点慢,但我想我无法直接访问位图中的颜色字节......