如何用C++获取一张bmp图片(24位)的RGB量及长宽
有一张放在D盘根目录的图片,要求用一个函数获取它某个点的RGB分量(int类型)。即输入坐标获取RGB分量。代码尽量简短。...
有一张放在D盘根目录的图片,要求用一个函数获取它某个点的RGB分量(int类型)。即输入坐标获取RGB分量。
代码尽量简短。 展开
代码尽量简短。 展开
1个回答
展开全部
{
int x=5,y=5,width,height;//x,y是需要查找的点的坐标,从0开始
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);//启动GDI+,方便加载位图
Bitmap bmp(_T("E:\\c.bmp"));
HBITMAP hBmp = NULL;
bmp.GetHBITMAP(Color(0),&hBmp);//获取位图句柄
BITMAP bi = {0};
GetObject(hBmp,sizeof(BITMAP),&bi);//获取位图信息,包括深度,宽高,步长等
width = bi.bmWidth;height = bi.bmHeight;//保存宽高
byte *pBit = new byte[bi.bmWidthBytes*bi.bmHeight];
::GetBitmapBits(hBmp,bi.bmWidthBytes*bi.bmHeight,pBit);//获取位图数据
int n = y*bi.bmWidthBytes + x*bi.bmBitsPixel/8;
int out = RGB(pBit[n+2],pBit[n+1],pBit[n]);//定位到数据中获取颜色信息
GdiplusShutdown(gdiplusToken);//关闭GDI+
}
这里是用GDI+加载位图,也可以用第三方库加载位图获取位图数据然后直接定位像素,使用的时候记得加GDI+的头文件,否则编译不过
int x=5,y=5,width,height;//x,y是需要查找的点的坐标,从0开始
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);//启动GDI+,方便加载位图
Bitmap bmp(_T("E:\\c.bmp"));
HBITMAP hBmp = NULL;
bmp.GetHBITMAP(Color(0),&hBmp);//获取位图句柄
BITMAP bi = {0};
GetObject(hBmp,sizeof(BITMAP),&bi);//获取位图信息,包括深度,宽高,步长等
width = bi.bmWidth;height = bi.bmHeight;//保存宽高
byte *pBit = new byte[bi.bmWidthBytes*bi.bmHeight];
::GetBitmapBits(hBmp,bi.bmWidthBytes*bi.bmHeight,pBit);//获取位图数据
int n = y*bi.bmWidthBytes + x*bi.bmBitsPixel/8;
int out = RGB(pBit[n+2],pBit[n+1],pBit[n]);//定位到数据中获取颜色信息
GdiplusShutdown(gdiplusToken);//关闭GDI+
}
这里是用GDI+加载位图,也可以用第三方库加载位图获取位图数据然后直接定位像素,使用的时候记得加GDI+的头文件,否则编译不过
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询