找回密码
 立即注册

QQ登录

只需一步,快速开始

leadcom

论坛元老

24

主题

96

帖子

2万

积分

论坛元老

积分
27812

活字格认证

leadcom
论坛元老   /  发表于:2015-7-30 17:42  /   查看:8240  /  回复:7
通点鼠标在图片上点击,同时取得点击图片位置上相应的颜色。
但在操作的过程中,取得图片点的颜色位置有很大的偏差。
图片:

代码:
  1.         private void _viewer_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
  2.         {

  3.             point = new Point(e.X, e.Y);
  4.             Transformer t = new Transformer(DigImageUtils.ToMatrix(ImageViewer.ImageTransform));
  5.             point = Point.Round(t.PointToLogical(point));
  6.         }
复制代码
  1.         private void _viewer_Click(object sender, EventArgs e)
  2.         {
  3.          
  4.             if(point==Point.Empty)
  5.                 return;
  6.             LeadPoint offset = new LeadPoint(point.X, point.Y);
  7.             // Adjust the XOffset and YOffset  in case the view perspective is not TopLeft.
  8.             offset = ImageViewer.Image.PointToImage(Leadtools.RasterViewPerspective.TopLeft, offset);
  9.             rasterColor = ImageViewer.Image.GetPixelColor(offset.X, offset.Y);
  10.             ImageViewer.Image.SetPixelColor(offset.X, offset.Y, RasterColor.Black);
  11.             txtColor.BackColor = Color.FromArgb(rasterColor.R, rasterColor.G, rasterColor.B);
  12.         }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2015-7-31 11:11:00
沙发
回复 1楼leadcom的帖子

LeadTools 获取特定坐标点可以使用 GetPixelColor 方法,请参考帮助文档:
https://www.leadtools.com/help/l ... ~getpixelcolor.html

关键代码:

  1. [TestMethod]
  2. public void GetPixelColorExample()
  3. {
  4.    RasterCodecs codecs = new RasterCodecs();
  5.    // Load the image
  6.    RasterImage image = codecs.Load(Path.Combine(ImagesPath.Path, "IMAGE1.CMP"));
  7.    // Specify a line of pixels.
  8.    LeadPoint offset = new LeadPoint(image.Width / 8, image.Height / 8);
  9.    int XSize = image.Width / 3;

  10.    // Invert the colors of pixels in the line.
  11.    for(int i = 0; i < XSize; i++)
  12.    {
  13.       LeadPoint oldOffset = new LeadPoint(offset.X, offset.Y);
  14.       // Adjust the XOffset and YOffset  in case the view perspective is not TopLeft.
  15.       offset = image.PointToImage(Leadtools.RasterViewPerspective.TopLeft, offset);
  16.       RasterColor pixelColor = image.GetPixelColor(offset.Y, offset.X);
  17.       pixelColor.R = (byte)(255 - pixelColor.R);
  18.       pixelColor.G = (byte)(255 - pixelColor.G);
  19.       pixelColor.B = (byte)(255 - pixelColor.B);
  20.       image.SetPixelColor(offset.Y, offset.X, pixelColor);

  21.       offset = oldOffset; // Restore Offset
  22.       offset.X = offset.X + 1;
  23.    }

  24.    codecs.Save(image, Path.Combine(ImagesPath.Path, "IMAGE1_GetPixelColor.BMP"), RasterImageFormat.Bmp, 0);

  25.    image.Dispose();
  26.    codecs.Dispose();
  27. }
复制代码
回复 使用道具 举报
leadcom
论坛元老   /  发表于:2015-7-31 12:54:00
板凳
我就是参照这个例子来做的,还是有问题。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-7-31 15:28:00
地板
回复 3楼leadcom的帖子

这个问题我们正在调查中,已经和厂商进行沟通,下周会给您提供一个解决方法。
回复 使用道具 举报
leadcom
论坛元老   /  发表于:2015-8-3 10:47:00
5#
怎么样了,大侠,急等着。。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-8-3 15:49:00
6#
回复 5楼leadcom的帖子

需要通过 PointFromImage 转换下坐标:

  1.         void rasterImageViewer1_MouseDown(object sender, MouseEventArgs e)
  2.         {
  3.             point = new Point(e.X, e.Y);
  4.             RasterImage image = this.rasterImageViewer1.Image;

  5.             LeadPoint ImagePoint = new LeadPoint(e.X, e.Y);
  6.             ImagePoint = image.PointFromImage(RasterViewPerspective.LeftTop, ImagePoint);

  7.             RasterColor rc = this.rasterImageViewer1.Image.GetPixelColor(ImagePoint.X, ImagePoint.Y);

  8.         }
复制代码
回复 使用道具 举报
leadcom
论坛元老   /  发表于:2015-8-3 16:54:00
7#
解决了,但你提供的代码还有一个小问题。
需要先将取得的坐标转换一下,因为图片显示的比例不一样。
           
  1. point = new Point(e.X, e.Y);
  2.             Transformer t = new Transformer(DigImageUtils.ToMatrix(ImageViewer.ImageTransform));
  3.             point = Point.Round(t.PointToLogical(point));
  4.             ImagePoint = new LeadPoint(point.X, point.Y);
  5.             ImagePoint = ImageViewer.Image.PointFromImage(RasterViewPerspective.LeftTop, ImagePoint);
  6.             rasterColor = ImageViewer.Image.GetPixelColor(ImagePoint.X, ImagePoint.Y);
复制代码
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-8-4 09:31:00
8#
回复 7楼leadcom的帖子

好的,感谢您的补充,谢谢

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部