getdibits遍历位图获取像素的颜色值(rgb)(代码片段)

小哈龙 小哈龙     2023-03-14     498

关键词:

GetDIBits 遍历位图 获取像素的颜色值(RGB)

CBitmap m_bmp;
//根据位图资源导入之后的ID来获得位图
m_bmp.LoadBitmap(IDB_BITMAP_ORIGIN);</pre>

接下来就是通过GetDIBits函数来对位图的像素进行遍历,获取RGB

BITMAP bm;
	m_bmp.GetBitmap(&bm);

	int nbyte = bm.bmBitsPixel / 8;

	BITMAPINFO bi;  
	bi.bmiHeader.biSize = sizeof(bi.bmiHeader);  
	bi.bmiHeader.biWidth = bm.bmWidth;  
	bi.bmiHeader.biHeight = -bm.bmHeight;  
	bi.bmiHeader.biPlanes = 1;  
	bi.bmiHeader.biBitCount = bm.bmBitsPixel;   
	bi.bmiHeader.biCompression = BI_RGB;   
	bi.bmiHeader.biSizeImage = bm.bmWidth * bm.bmHeight * nbyte; 
	bi.bmiHeader.biClrUsed = 0;  
	bi.bmiHeader.biClrImportant = 0;  

	// 获取位图数据  
	HDC hdc = ::GetDC(NULL);  
	BYTE* pBits = (BYTE*)new BYTE[bm.bmWidth * bm.bmHeight * nbyte];  
	::ZeroMemory(pBits, bm.bmWidth * bm.bmHeight * nbyte);  
	if (!::GetDIBits(hdc, m_bmp, 0, bm.bmHeight, pBits, &bi, DIB_RGB_COLORS))  
	  
		delete pBits;  
		pBits = NULL;  
	 
	for (int i = 0;i < bm.bmWidth;++i)
	
		for (int j = 0;j < bm.bmHeight;++j)
		
			BYTE r = pBits[i * nbyte + j * bm.bmWidthBytes + 2];
			BYTE g = pBits[i * nbyte + j * bm.bmWidthBytes + 1];
			BYTE b = pBits[i * nbyte + j * bm.bmWidthBytes+ 0];
			//这里就可以做我们处理了
		
	

	delete pBits;  
	pBits = NULL; 

GetDIBits 返回兼容位图的无效颜色数组

】GetDIBits返回兼容位图的无效颜色数组【英文标题】:GetDIBitsreturnsinvalidcolorsarrayofcompatiblebitmap【发布时间】:2018-08-0919:36:08【问题描述】:我正在尝试从兼容位图(完全由RGB(0,0,255)颜色填充)到GetDIBits获取像素数组,但它返回... 查看详情

getdibits返回兼容位图的无效颜色数组(代码片段)

我试图从兼容的位图(它完全由RGB(0,0,255)颜色填充)通过GetDIBits获取像素数组,但它返回另一种颜色。并且,当我尝试更改数组时,它实际上返回一个异常。怎么了?caseWM_PAINT:PAINTSTRUCTps;HDChdc=BeginPaint(hwnd,&ps);HBRUSHhb=CreateSolidBr... 查看详情

如何计算位图的平均 rgb 颜色值

】如何计算位图的平均rgb颜色值【英文标题】:Howtocalculatetheaveragergbcolorvaluesofabitmap【发布时间】:2010-11-0706:58:30【问题描述】:在我的C#(3.5)应用程序中,我需要获取位图的红色、绿色和蓝色通道的平均颜色值。最好不使用外部... 查看详情

从 24bpp 位图中获取每个像素的 RGB 值,以便在 C 中转换为 GBA 格式

】从24bpp位图中获取每个像素的RGB值,以便在C中转换为GBA格式【英文标题】:GettingRGBvaluesforeachpixelfroma24bppBitmapforconversiontoGBAformatinC【发布时间】:2009-10-0712:15:19【问题描述】:我想从.bmp文件中读取每个像素的RGB值,因此我可以... 查看详情

WinAPI/GDI:如何使用 GetDIBits() 为位图合成颜色表?

】WinAPI/GDI:如何使用GetDIBits()为位图合成颜色表?【英文标题】:WinAPI/GDI:HowtouseGetDIBits()togetcolortablesynthesizedforabitmap?【发布时间】:2018-03-1516:48:10【问题描述】:我很难理解下面来自MSDN网站GetDIBits()函数的摘录:如果lpvBits为NULL... 查看详情

如何通过鼠标单击获取像素的 rgb 颜色值

】如何通过鼠标单击获取像素的rgb颜色值【英文标题】:howtopickuprgbcolorvalueofapixelfromamouseclick【发布时间】:2011-08-1913:17:25【问题描述】:这可能是一个非常幼稚的问题,但我有点卡住了。我正在编写我的第一个opengl程序,我想... 查看详情

C#位图从像素中读取不正确的颜色

】C#位图从像素中读取不正确的颜色【英文标题】:C#BitmapReadingincorrectcolourfrompixel【发布时间】:2013-03-1811:10:00【问题描述】:我正在将8位png文件读入C#.net3.5中的位图中。当通过诸如paint.net之类的任何普通程序读取时,我的目标... 查看详情

在鼠标移动时获取fabric.js中图像像素的rgb值

】在鼠标移动时获取fabric.js中图像像素的rgb值【英文标题】:getrgbvaluesofpixelofimageinfabric.jsonmousemove【发布时间】:2015-01-0218:43:51【问题描述】:如何在鼠标移动时获取fabric.js中图像的rgb值。我使用了图像对象的getFill()方法,但它... 查看详情

矢量图位图rgbyuvjpegpng的理解

...,抽时间做个整理吧,理一下相关的概念。一、矢量图与位图矢量图与位图均为图像的表述方式,矢量图可以理解为在我们口中描述图形的方法,比如:图A:一个半径10cm的绿色实心圆,重点包括:圆、实心、绿色、半径为10cm、... 查看详情

qt之qimage

...于处理图像像素的函数取决于图像格式。原因是单色和8位图像基于索引并使用颜色查找表,而32位图像直接存储ARGB值。有关图像格式的更多信息,请参见ImageFormats部分。对于32位图像,可以使用setPixel()函数将给定坐标处的像素... 查看详情

OpenCV:如何为每个像素填充具有每种 RGB 颜色值的 rgb 图像?

】OpenCV:如何为每个像素填充具有每种RGB颜色值的rgb图像?【英文标题】:OpenCV:howtofillrgbimagehavingvaluesforeachofRGBcolorsforeachpixel?【发布时间】:2010-11-1921:04:42【问题描述】:那么有RGBRGBRGB...大小为w*3的缓冲区如何用这些数据填充Op... 查看详情

获取每个超像素的 RGB 像素值列表

】获取每个超像素的RGB像素值列表【英文标题】:GetthelistofRGBpixelvaluesofeachsuperpixel【发布时间】:2018-02-2012:51:03【问题描述】:我有一个尺寸为(224,224,3)的RGB图像。l使用SLIC算法对其进行超像素分割。如下:img=skimageIO.imread("first_i... 查看详情

ps中的位图,矢量图,颜色模式

什么是位图?什么是矢量图?位图是由像素组成的图像,在缩放和旋转的时候容易失真,同时文件容量较大矢量图是根据几何特性来绘制的图形,通过数学公式计算获得的,不易制作色彩变化太多的图象 颜色模式RGB模式、CMY... 查看详情

使用 Winsock、GetDIBits 和 SetDiBits 进行位图传输 [关闭]

】使用Winsock、GetDIBits和SetDiBits进行位图传输[关闭]【英文标题】:BitmaptransferusingWinsock,GetDIBitsandSetDiBits[closed]【发布时间】:2010-08-2202:36:25【问题描述】:我开始研究类似于C++中的远程控制应用程序的东西。我希望将特定窗口的... 查看详情

如何获取png图片某点像素的rgba值

...所使用的bytes位数。参数colorspace用于被渲染内存区域的“位图上下文”。参数bitmapInfo指定被渲染内存区域的“视图”是否包含一个alpha(透视)通道以及每个像素相应的位置,除此之外还可以指定组件式是浮点值还是整数值。本... 查看详情

用ps怎么把一张图片两种颜色互换?求讲详细的步骤?

...油墨覆盖的百分比来度量(0%等于白色,100%等于黑色).4、位图模式位图模式使用两种颜色值(黑色或白色)之一表示图像中的像素.位图模式下的图像被称为位映射1位 查看详情

androidbitmap理解

...AndroidBitmap详解:关于Bitamp你所要知道的一切AndroidBitmap(位图)详解图片是由大量且有限个数的像素点组成。把一张图片通过bitmap的方式创建到内存中,实际上就是在内存中创建了一个叫做Bitmap的对象,然后把图片所有像素解码... 查看详情

opencvcore组件进阶(代码片段)

...公式是Inew=(Iold/10)*10来计算。总结来看:就是对图像矩阵遍历每一个像素,然后对像素值进行公式运算。2、LUT函数:L 查看详情