Мне нужен обмен RGBA-каналом в растровых пикселях. Например, графические записи .net записывают каналы в растровые изображения в BGRA, и мне нужен RGBA. Я думаю, что этот порядок определен PIXELFORMATDESCRIPTOR, но я не знаю, как это сделать. I do folowИзменение формата пикселя для рисования в растровое изображение
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);
Я пытаюсь изменить смену каналов, но ничего не делать.
Спасибо за ответ. Это может помочь, если я рисую только изображения в растровое изображение, но рисую линии, прямоугольники и т. Д. По этому я мог бы перерисовать растровое изображение с помощью ColorMap, но это изображение дважды, и это не обязательно, потому что я могу поменять свои каналы непосредственно в памяти. Я думаю о чем-то вроде цветовой карты в режиме рисования. –
Зачем вам нужно транспонировать биты каждый раз, когда вы рисуете что-то? Недостаточно ли этого сделать один раз - либо в начале, либо в конце? Что именно ты пытаешься сделать? – Ani
Я использую библиотеку vtk для визуализации этого растрового изображения и vtk, использующего цветовую схему RGBA растрового изображения, вместо BGRA, которые дают мне графику после рисования. Теперь перед визуализацией непосредственно подкачки B и R. –