问题描述
是否可以设置GDIPlus图形方法或位图方法的颜色的设置仅表示二进制图像的黑白(0,0 / 255,255,255)颜色?我已经尝试过位图类的colorpalette选项(getPalette / setPalette),但是它根本不起作用。
我已经访问了图像本身,但是它也不起作用。请注意图片本身。
for (int bufidx = 0; bufidx < m_BufferSize; bufidx++)
{
if (m_pImage[BINARY_VID][bufidx] > m_Threshold)
{
m_pImage[BINARY_VID][bufidx] = 255;
}
else
{
m_pImage[BINARY_VID][bufidx] = 0;
}
} // Algorithm for thresholding image
这是更改数据本身的代码。 m_buffersize是图片的大小(宽度*高度)
m_pImage [BINARY_VID]是具有0〜255个值的8位数据的数据本身。数据来自摄像头模块。
m_pBitmap[vidType]->LockBits(&rc,PixelFormat8bppIndexed,&bitmapdata);
memcpy(bitmapdata.Scan0,m_pImage[vidType],m_BufferSize);
m_pBitmap[vidType]->UnlockBits(&bitmapdata);
这是我将其转换为位图方法的部分
int paletteSize = m_pBitmap[vidType]->GetPaletteSize();
ColorPalette* pPalette = new ColorPalette[paletteSize];
m_pBitmap[vidType]->GetPalette(pPalette,paletteSize);
// gets palette info of bitmap image to set color info of the bitmap
switch (vidType)
{
case NORMAL_VID:
case ROI_VID:
for (unsigned int i = 0; i < pPalette->Count; i++)
{
pPalette->Entries[i] = Color::MakeARGB(255,i,i);
}
m_pBitmap[vidType]->SetPalette(pPalette);
break;
// Normal video || ROI video color set
case BINARY_VID:
for (unsigned int i = 0; i < pPalette->Count; i++)
{
if (i > m_Threshold)
{
pPalette->Entries[i] = Color::MakeARGB(255,255);
}
else
{
pPalette->Entries[i] = Color::MakeARGB(255,0);
}
}
m_pBitmap[vidType]->SetPalette(pPalette);
break;
default:
AfxMessageBox(TEXT("vidtype error : on converting palette!"));
delete[] pPalette;
return;
break;
}
delete[] pPalette;
MemoryLeakCheck();
这是我用来转换颜色的部分。
这是我得到的结果图像。我只是不知道为什么我在仅包含0或255数据的二进制图像上出现灰度噪声。