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.X
和e.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.X
和e.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.X
和e.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分量