如何使用C++编写提取图像中特定像素点(给定x,y坐标)的RGB信息

如题所述

第1个回答  2012-03-02
win api 函数 :getwindowpixel()别忘加分呢。
#include<stdio.h>
int main()
{
int width,height,x,y;
unsigned short bitCount;
int offbits;
int bitPerLine;
unsigned char data;
FILE* bmpfp = fopen("E:\\风景\\风景1.bmp","rb");
fseek(bmpfp,18,SEEK_SET);
fread(&width,sizeof(int),1,bmpfp);
fread(&height,sizeof(int),1,bmpfp);
printf("width : %d , height : %d\n",width,height);
fseek(bmpfp,2,SEEK_CUR);
fread(&bitCount,sizeof(bitCount),1,bmpfp);
fseek(bmpfp,10,SEEK_SET);
fread(&offbits,sizeof(int),1,bmpfp);

if(bitCount==24){
bitPerLine = ( (width*3)%4==0 ) ? width*3 : ( (width*3)/4 )*4 + 4;
while(1){
printf("请输出坐标:");
scanf("%d%d",&x,&y);
if(x>width||y>height) return 0;
fseek(bmpfp, 18 + offbits + bitPerLine * y + 3*x , SEEK_SET);
fread(&data,sizeof(data),1,bmpfp);
printf("该点蓝色分量:%d",data);
fread(&data,sizeof(data),1,bmpfp);
printf("该点绿色分量:%d",data);
fread(&data,sizeof(data),1,bmpfp);
printf("该点红色分量:%d\n",data);
}
}else{
printf("不是真彩位图!");
}
}
第2个回答  2012-03-02
给你找了份示例代码

#include<stdio.h>
int main()
{
int width,height,x,y;
unsigned short bitCount;
int offbits;
int bitPerLine;
unsigned char data;
FILE* bmpfp = fopen("E:\\风景\\风景1.bmp","rb");
fseek(bmpfp,18,SEEK_SET);
fread(&width,sizeof(int),1,bmpfp);
fread(&height,sizeof(int),1,bmpfp);
printf("width : %d , height : %d\n",width,height);
fseek(bmpfp,2,SEEK_CUR);
fread(&bitCount,sizeof(bitCount),1,bmpfp);
fseek(bmpfp,10,SEEK_SET);
fread(&offbits,sizeof(int),1,bmpfp);

if(bitCount==24){
bitPerLine = ( (width*3)%4==0 ) ? width*3 : ( (width*3)/4 )*4 + 4;
while(1){
printf("请输出坐标:");
scanf("%d%d",&x,&y);
if(x>width||y>height) return 0;
fseek(bmpfp, 18 + offbits + bitPerLine * y + 3*x , SEEK_SET);
fread(&data,sizeof(data),1,bmpfp);
printf("该点蓝色分量:%d",data);
fread(&data,sizeof(data),1,bmpfp);
printf("该点绿色分量:%d",data);
fread(&data,sizeof(data),1,bmpfp);
printf("该点红色分量:%d\n",data);
}
}else{
printf("不是真彩位图!");
}
}

/*

运行结果:

width : 700 , height : 382
请输出坐标:0 0
该点蓝色分量:68该点绿色分量:82该点红色分量:80

*/本回答被提问者采纳

如何用c++编程实现提取给定图像中任意一点的RGB颜色值
printf("input the X:");scanf("%d", &x);if (x < 0)break;printf("input the Y:");scanf("%d", &y);if (GetDIBColor(x, y, &r, &g, &b) == 1)printf("(%d, %d): r:%d, g:%d, b:%d\\n", x, y, (int)r, (int)g, (int)b);else printf("input error.\\n...

(C++)如何获取客户区中指定点的RGB值?
CClientDC dc(this);COLORREF rgb=dc.GetPixel(point.x,point.y);BYTE pixelR=GetRValue(rgb);BYTE pixelG=GetGValue(rgb);BYTE pixelB=GetBValue(rgb);你可以在鼠标移动事件里加入上面的代码

如何在c++builer中获取bmp图片每个像素的坐标及RGB值
int w = Image1->Width;int h = Image1->Height;for (y = 0; y < h; y++)for (x = 0; x < w; x++){ 返回点的RGB值 = Image1->Canvas->Pixels[x][y];} }

怎样在c++ Visual Studio中定义一个数组存取某彩图的所有RGB像素值?
BITMAPINFOHEADER bih = {0};\/\/位图信息头 bih.biBitCount = bmp.bmBitsPixel;\/\/每个像素字节大小 bih.biCompression = BI_RGB;bih.biHeight = bmp.bmHeight;\/\/高度 bih.biPlanes = 1;bih.biSize = sizeof(BITMAPINFOHEADER);bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;\/\/图像数据大小...

如何用C++获取一张bmp图片(24位)的RGB量及长宽
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+的头文件,...

C++ 读取位图像素数据
你只需要通过BITMAPINFOHEADER中的宽高等信息,计算位移,就可以读取某个点的RGB值了。还有一个简单的办法,你之前已经有memBitmap这个CBitmap了,通过这个做更方便。通过SelectObject将memBitmap放到一个CDC中,直接使用函数GetPixel函数就可以获取指定某个点的RGB值了,这个不需要计算和位移。

C#中 怎么获得某一个控件中图片的某一点像素的颜色值啊?
要使用GetPixel函数来取得像素的颜色值,代码如下:private void button1_Click(object sender, EventArgs e) { Color color = new Bitmap(pictureBox1.Image).GetPixel(10, 10); MessageBox.Show(color.ToString()); }效果见下图:...

c++ API 在屏幕上(或窗口中)的(x,y)坐标绘制一个点
下面是调用Windows的API实现画点的。include<windows.h> int main( void ){ \/\/ 获取一个可供画图的DC,我这里就直接用桌面算了 HDC hdc = GetWindowDC( GetDesktopWindow() );\/\/ 创建红色1像素宽度的实线画笔 HPEN hpen1 = CreatePen( PS_SOLID, 1, RGB(255,0,0) );\/\/ 创建绿色5像素...

请问在visual c++环境下画点的函数是哪个?
在vc中使用SetPixel()函数来画点,SetPixel函数说明:函数功能:该函数将指定坐标处的像素设为指定的颜色。COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF crColor);参数hdc设备环境句柄。X指定要设置的点的X轴坐标,按逻辑单位表示坐标。Y指定要设置的点的Y轴坐标,按逻辑单位表示坐标。cr...

用C++如何读取图片
1、第一步,在图片采样软件中找到软件快捷方式,然后单击以打开该软件,如下图所示,然后进入下一步。2、其次,完成上述步骤后,已经进入了取模软件,单击“载入图片”按钮以添加图片,如下图所示,然后进入下一步。3、接着,完成上述步骤后,选择要添加的图片,单击以选择图片,然后单击“打开”按钮,...

相似回答