【发布时间】:2013-09-03 02:36:48
【问题描述】:
我正在尝试将 8-bpp 索引位图转换为 RGB 位图,但没有成功。
第一个问题是GetPalette() 返回的调色板不包含 256 个唯一数字。
这是我目前的代码:
BitmapData bitmapData;
int paletteSize =b->GetPaletteSize();
ColorPalette colorPalette;
b->GetPalette(&colorPalette,paletteSize/4);
b->LockBits(new Gdiplus::Rect(0,0,b->GetWidth(),b->GetHeight()),0,b->GetPixelFormat(),&bitmapData);
char* scan0 = (char*)bitmapData.Scan0;
width = b->GetWidth();
height = b->GetHeight();
stride = bitmapData.Width*4;
pBitmapData = new char[stride*height];
DWORD B = 0x00FF0000;
DWORD G =0x0000FF00;
DWORD R = 0x000000FF;
int currentIndex=0;
for(int i = 0 ; i < height; i++)
{
for(int j =0 ; j < width; j++)
{
std::stringstream ss;
currentIndex = i*stride+j*3;
pBitmapData[currentIndex+1]= (colorPalette.Entries[scan0[i*width+j]]&&B)>>16;
pBitmapData[currentIndex+2]= (colorPalette.Entries[scan0[i*width+j]]&&G)>>8;
pBitmapData[currentIndex+3]= (colorPalette.Entries[scan0[i*width+j]]&&R);
}
}
b->UnlockBits(&bitmapData);
我该如何解决这个问题?
【问题讨论】:
-
那么你能描述一下出了什么问题吗?
-
除了结果位图不正确之外什么都没有
-
好的,那么什么是不正确的?该死的迂腐的人这些程序员... ;)
-
抱歉,返回的结果位图是黑色且失真的 :)