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);
どうすればこれを修正できますか?