怎么获取一张图片某个点上的像素值?

jbz001 2010-11-12 02:18:18
我们现在做开发,我需要获取一张图片某个点上的像素值。

我们使用的框架没有提供这个接口,我现在想用C++的库函数,或者Windows API来做,但不知道哪个函数可以实现。

图片是从文件读取的,并且图片支持Alpha通道。
...全文
1433 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzhx 2010-11-15
  • 打赏
  • 举报
回复
你需要使用 GDI+ 当中 Bitmap 的 GetPixel
Bitmap bmp = new Bitmap("1.png");
// bmp.GetPixel();
jbz001 2010-11-14
  • 打赏
  • 举报
回复
jbz001 2010-11-14
  • 打赏
  • 举报
回复
图片格式为png,以后也可能会支持其他格式,例如tga
jbz001 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jacky_qiu 的回复:]

把以下代码放到对话框程序里运行即可
C/C++ code


/****************************************************************************
获取图片的像素值
****************************************************************************/
c……
[/Quote]

忘了说一点,需要获取的是这个点上的Alpha值,RGB不太需要。
jacky_qiu 2010-11-14
  • 打赏
  • 举报
回复
把以下代码放到对话框程序里运行即可


/****************************************************************************
获取图片的像素值
****************************************************************************/
class CGetPixel
{
private:
int m_bitmap_cx;
int m_bitmap_cy;
public:
HBITMAP m_bitmap;
CGetPixel() {}
CGetPixel(HBITMAP bitmap) {m_bitmap=bitmap;}
CGetPixel(TCHAR * PicturePath) { LoadPicture(PicturePath); }
CGetPixel(WORD ResourceID) { LoadResource(ResourceID); }

~CGetPixel() { ::DeleteObject(m_bitmap);}

bool LoadPicture(TCHAR * PicturePath)
{
m_bitmap=(HBITMAP)LoadImage(NULL, //应用程序实例
PicturePath, //路径
IMAGE_BITMAP,
0, //如果不置0,则此参数指定m_bitmap的宽(位图被拉伸)
0, //如果不置0,则此参数指定m_bitmap的高(位图被拉伸)
LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);

if (!m_bitmap)
return false;

BITMAP bmp;
GetObject(m_bitmap,sizeof(BITMAP),(LPSTR)&bmp);
m_bitmap_cx=bmp.bmWidth;
m_bitmap_cy=bmp.bmHeight;

return true;
}

bool LoadResource(WORD ResourceID)
{
m_bitmap=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE (ResourceID) );

if (!m_bitmap)
return false;

BITMAP bmp;
GetObject(m_bitmap,sizeof(BITMAP),(LPSTR)&bmp);
m_bitmap_cx=bmp.bmWidth;
m_bitmap_cy=bmp.bmHeight;

return true;
}

COLORREF Get(int x=0,int y=0)
{
HDC hMemDC=CreateCompatibleDC(NULL); //创建内存DC
::SelectObject(hMemDC,m_bitmap); //把位图选进内存DC
COLORREF rgb=::GetPixel(hMemDC,x,y);
::DeleteDC(hMemDC) ; //删除内存DC
return rgb;
}
};


void CDemoDlg::OnButton1()
{
CGetPixel g_bmp1("D:\\My Documents\\My Pictures\\风景图片\\4244123431.bmp");
COLORREF rgb=g_bmp1.Get(39,10);

BYTE r=GetRValue(rgb);
BYTE g=GetGValue(rgb);
BYTE b=GetBValue(rgb);
// trace3((int)r,(int)g,(int)b);
}



wufengcn 2010-11-14
  • 打赏
  • 举报
回复
是这个
iBitsPixel=GetDeviceCaps(hdc,BITSPIXEL);
jbz001 2010-11-14
  • 打赏
  • 举报
回复
有没有人给我提供几个函数啊???
hastings 2010-11-12
  • 打赏
  • 举报
回复
自己研究图片格式~~
Eleven 2010-11-12
  • 打赏
  • 举报
回复
GetPixel();??
april1yu 2010-11-12
  • 打赏
  • 举报
回复
用opencv实现吧

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧