C# 如何得到图片上某个像素点的坐标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 如何得到图片上某个像素点的坐标相关的知识,希望对你有一定的参考价值。

C#.net 中图片上有个红色亮点,背景全黑,怎么得到这个红点的坐标!比如图片是640×480的。GetPixelColor函数行不行?

当然不行了,直接获得该点的XY坐标,之后计算出实际坐标
给你个例子
private void panel1_MouseMove(object sender, MouseEventArgs e)

float loc_X = 0;
float loc_Y = 0;
float loc_Fy = 0;

loc_X = e.Location.X ;
loc_Y = e.Location.Y;

//判断是否1、10---1小时 8小时
DateTime dt_HM=new DateTime ();
DateTime last_Time = DateTime.Now;

if (combJD_SJKD.Text =="10")

dt_HM = Convert.ToDateTime (DateTime.Now.AddHours(-7).ToString("yyyy-MM-dd HH") + ":10");
//loc_X = ((loc_X - 50)* 2)/3;
loc_X = (((loc_X - 50) * 43) / (pub_lastX - 50)) * 10;


else

dt_HM = Convert.ToDateTime (DateTime.Now.AddHours(-1).ToString("yyyy-MM-dd HH:mm"));
//loc_X = (loc_X - 50) / 12;
loc_X = ((loc_X - 50) * 58) / (pub_lastX-50);

//Y轴取整换算成实际坐标轴
loc_Fy = (panel1.Height -30)-loc_Y;
//1个刻度有多少格
float Y_GESHU = ((panel1.Height - 30) - pub_lastY) / 60;
//loc_Fy = loc_Fy/7;

//loc_Fy = loc_Fy / 8 + 3;
loc_Y =(int )( (loc_Fy)/Y_GESHU );
loc_Y = (int)(loc_Y - (loc_Y / 10));

//X轴换算成实际坐标轴

dt_HM = dt_HM.AddMinutes(loc_X);

//提取查询的日期、时间 并确定比例因子
int scale=1;
scale = scale * pub_addscale;

loc_Y = loc_Y * scale;
lab_ZT.Text = "通行人数为:" + Convert.ToString(loc_Y) + "人 此时刻值为" + dt_HM.ToString() ;

参考技术A 先确定红点的具体颜色,然后逐点比较,遇到相应的点就停止,记下坐标

C#如何从拉伸的位图/图片框中获取像素

【中文标题】C#如何从拉伸的位图/图片框中获取像素【英文标题】:C# How to get pixel from stretched bitmap/picturebox 【发布时间】:2015-09-04 17:09:49 【问题描述】:

好的,我有一个带有图像的图片框,其 sizeMode 设置为:StretchImage, 现在,我想获取我点击的像素。 (bitmap.GetPixel(x,y))。 但是当图像从正常大小拉伸时,我得到了原始像素。就像在拉伸之前存在的像素一样(如果这有意义吗?)

我的代码:

Private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
  Bitmap img = (Bitmap)pictureBox1.Image; 
  var color = img.GetPixel(e.X, e.Y)

提前致谢

【问题讨论】:

【参考方案1】:

应该有办法补偿图片框引起的拉伸因子。我正在考虑从图片框中获取拉伸的宽度和高度,以及原始图像的宽度和高度,计算拉伸因子,并将它们与e.Xe.Y 坐标相乘。 可能是这样的:

Bitmap img = (Bitmap)pictureBox1.Image; 
float stretch_X = img.Width  / (float)pictureBox1.Width;
float stretch_Y = img.Height / (float)pictureBox1.Height;
var color = img.GetPixel((int)(e.X * stretch_X), (int)(e.Y * stretch_Y)); 

【讨论】:

谢谢,工作就像一个魅力! :)【参考方案2】:

e.Xe.Y 与拉伸因子相除。这是拉伸后的图像填满了整个图片框。

Bitmap img = (Bitmap)pictureBox1.Image;
float factor_x = (float)pictureBox1.Width / img.Width;
float factor_y = (float)pictureBox1.Height / img.Height;
var color = img.GetPixel(e.X / factor_x, e.Y / factor_y)

通过这样做,我们确保e.Xe.Y 不会超出原始图像的限制。

【讨论】:

【参考方案3】:

您可以存储原始图像并保持原样。这比调整拉伸图像的大小并获得指定的像素后缀更容易。确保 e.X 和 e.Y 不会超出原始位图的范围。

    private Bitmap _img;

    public void LoadImage(string file) 
        // Get the image from the file.
        pictureBox1.Image = Bitmap.FromFile(file);
        // Convert it to a bitmap and store it for later use.
        _img = (Bitmap)pictureBox1.Image;

        // Code for stretching the picturebox here.
        // ...
    

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
        var color = _img.GetPixel(e.X, e.Y);
    

编辑:无视。马克西米利安的答案更好。

【讨论】:

以上是关于C# 如何得到图片上某个像素点的坐标的主要内容,如果未能解决你的问题,请参考以下文章

如何从labview显示出点图片中,提取出鼠标所在位置的像素坐标?

opencv使用cv::Mat时,如何修改某个像素点的RGB分量

如何利用matlab导入并提取jpg彩色图像像素点的坐标及其RGB值?想要完整的编码。谢谢哈。

C#如何从拉伸的位图/图片框中获取像素

用opencv如何提取像素点的RGB分量

opencv利用hough概率变换拟合得到直线后,利用DDA算法得到直线上的像素点坐标