我需要在位图像素中交换RGBA通道。例如.net图形将通道写入BGRA中的位图,我需要RGBA。我认为这个顺序由PIXELFORMATDESCRIPTOR决定,但我不知道如何。我做的是
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_BITMAP | // support window
PFD_SUPPORT_OPENGL |
PFD_NEED_PALETTE,
PFD_TYPE_COLORINDEX, // RGBA type
32, // 24-bit color depth
8, 8, 8, 0, 0, 0, // color bits ignored
8, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buffer
0, 0, 0, 0, // accum bits ignored
32, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};
int iPixelFormat;
::SelectObject ((HDC)_hdc.ToPointer (), (HBITMAP)_hBitmap.ToPointer ());
iPixelFormat = ChoosePixelFormat((HDC)_hdc.ToPointer (), &pfd);
bool result = ::SetPixelFormat((HDC)_hdc.ToPointer (), iPixelFormat, &pfd);
我尝试改变频道的转变,但它什么都不做。
答案 0 :(得分:0)
由于您使用的是.NET和Windows - 请查看Monogame中的this位代码。它使用ColorMatrix转置颜色组件。根据我的经验,这种方法快速,可靠,灵活。
对于您的特定问题,虽然看起来您需要一种方法将VTK提供的RGBA图像转换为Bitmap所采用的BGRA。我在这里看到两个选项:
希望这有帮助!