研究了GDI+处理图像的地方,发现它一些与众不同的地方,被它坑了一天。。。。。
1、GDI+的像素的原点默认你在左下角的,所以读取像素的顺序是从最低一行开始的(bottom-left),其他一般的图像处理软件,像Photoshop,OpenCV、FreeImage什么的都是在左上角的(top-left)。
2、GDI+生成的二值图像也与其他的不同,它用0表示黑色,非0(比特1)表示白色,二其他的像Photoshop恰恰相反的。就是说BW位图的头文件调色板相反的。
3、其他, 可以二值图像的调色板的两种颜色可以随意的进行替换,比如把比特0替换成白色,表示没有,比特1替换成红色。

附:下面的函数可以GDI+ Bitmap、Image的调色板
- // 修改调色板的函数
- void ResetPalette(Bitmap *pBitmap)
- {
- if(!pBitmap)
- return;
-
- // Modify Palette
- UINT size = pBitmap->GetPaletteSize();
- TRACE1("The size of the palette is %d bytes.\n", size);
-
- ColorPalette *ppal = (ColorPalette*)malloc(size);
- pBitmap->GetPalette(ppal, size);
-
- // Debug Palette
- if(size > 0)
- {
- TRACE1("There are %u colors in the palette.\n", ppal->Count);
-
- for(UINT j = 0; j < ppal->Count; ++j)
- TRACE1("0x%x\n", ppal->Entries[j]);
- }
-
- // Reset Palette
- ppal->Entries[0] = Color::MakeARGB(0xff,0xff,0xff,0xff);
- ppal->Entries[1] = Color::MakeARGB(0xff, 0xff,0x00,0x00);
-
- pBitmap->SetPalette(ppal);
-
- free(ppal);
- }
|