gpt4 book ai didi

c++ - 如何将 GDI 8-bpp 索引位图转换为 RGB 位图?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:13 28 4
gpt4 key购买 nike

我正在尝试将 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);

我该如何解决这个问题?

最佳答案

不应该这样:

currentIndex = i*stride+j*3;

成为:

currentIndex = i*stride+j*4;

鉴于:

stride =  bitmapData.Width*4;

还有:

(colorPalette.Entries[scan0[i*width+j]]&&B)>>16;

应该是:

(colorPalette.Entries[scan0[i*width+j]] & B)>>16;

&&表示“如果左右边都为真”,单&表示“按位与”。

关于c++ - 如何将 GDI 8-bpp 索引位图转换为 RGB 位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18578374/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com