GDI+绘画如何计算画出的一条线段中每个像素点的位置

贫下码农e 2020-04-10 05:25:52
在 Graphics 中绘画一张320x240的图片,然后在图片上面画一条白色线,代码效果如下:


private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
//画图片
Image image = new Bitmap("d:\\Test\\320x240.bmp");
int width = image.Width;
int height = image.Height;
e.Graphics.DrawImage(
image,
new Rectangle(0, 0, width, height),
0,
0,
width,
height,
GraphicsUnit.Pixel,
null);

//在图片上画一条白色斜线(可能是其他颜色线条)
int x1 = 109;
int y1 = 94;
int x2 = 163;
int y2 = 134;
e.Graphics.DrawLine(new Pen(Color.White, 1),
x1,
y1,
x2,
y2);
}




线条那部分放大的效果:


曾经想过用 GetPixel 方法遍历图片中线条白色像素点,但似乎行不通,因为图片可能也有相同的颜色块,
有什么方法计算起点(x1,y1)到终点(x2,y2)白色线条之间每个像素点的位置呢,望各位大神赐教,最好有示例代码,谢谢!
...全文
388 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
贫下码农e 2020-04-14
  • 打赏
  • 举报
回复
引用 5 楼 wanghui0380 的回复:
Gdi+内部使用SetInterpolationMode 这个参数设定的插值规则,我们需要先查到默认设置,然后再去找这个插值算法的具体实现 算了,也不想折腾了 楼上可行,先在透明底图上绘制,然后加层叠加上去,反正前面绘制在透明底图上,对卡方扫描没有干扰
这个 SetInterpolationMode在Graphics 是叫 InterpolationMode 默认值是 Bilinear,貌似是用来做旋转缩放用的参数啊
desperaso 2020-04-14
  • 打赏
  • 举报
回复
引用 6 楼 一烟一茶一码农 的回复:
这方法也曾想过,bitmap小图还可以,但大尺寸的bitmap图用遍历找指定的颜色像素点就费劲效率比较低啊,有没有效率高点的方法呢


用winfrom的话,https://bbs.csdn.net/topics/396386834
这个够快了,要不换C#的gpu库(Cudafy、Hybridizer、Accelerating、Gpu.Net等等)试一试,gpu够快
wanghui0380 2020-04-14
  • 打赏
  • 举报
回复
这方法也曾想过,bitmap小图还可以,但大尺寸的bitmap图用遍历找指定的颜色像素点就费劲效率比较低啊,有没有效率高点的方法呢 这个就不要纠结了,号称最NX的“卷积神经网络”第1步就是干这个事情,所以没有啥好担心的,了不起你并行做,分块开线程做
贫下码农e 2020-04-14
  • 打赏
  • 举报
回复
引用 4 楼 desperaso 的回复:
[quote=引用 楼主 一烟一茶一码农 的回复:] 曾经想过用 GetPixel 方法遍历图片中线条白色像素点,但似乎行不通,因为图片可能也有相同的颜色块, 有什么方法计算起点(x1,y1)到终点(x2,y2)白色线条之间每个像素点的位置呢,望各位大神赐教,最好有示例代码,谢谢!
方法可行啊, 先建立个和图像一样大的bitmap,在上面画条线,记录位置, 再把bitmap加到图像上去 https://bbs.csdn.net/topics/396386834[/quote] 这方法也曾想过,bitmap小图还可以,但大尺寸的bitmap图用遍历找指定的颜色像素点就费劲效率比较低啊,有没有效率高点的方法呢
wanghui0380 2020-04-13
  • 打赏
  • 举报
回复
Gdi+内部使用SetInterpolationMode 这个参数设定的插值规则,我们需要先查到默认设置,然后再去找这个插值算法的具体实现 算了,也不想折腾了 楼上可行,先在透明底图上绘制,然后加层叠加上去,反正前面绘制在透明底图上,对卡方扫描没有干扰
desperaso 2020-04-13
  • 打赏
  • 举报
回复
引用 楼主 一烟一茶一码农 的回复:
曾经想过用 GetPixel 方法遍历图片中线条白色像素点,但似乎行不通,因为图片可能也有相同的颜色块,
有什么方法计算起点(x1,y1)到终点(x2,y2)白色线条之间每个像素点的位置呢,望各位大神赐教,最好有示例代码,谢谢!


方法可行啊,
先建立个和图像一样大的bitmap,在上面画条线,记录位置,
再把bitmap加到图像上去
https://bbs.csdn.net/topics/396386834
贫下码农e 2020-04-13
  • 打赏
  • 举报
回复
引用 1 楼 C:/Tclauncher. exe 的回复:
不要用gdi,自己另外算
要怎么算有什么方法吗
wanghui0380 2020-04-10
  • 打赏
  • 举报
回复
额,根据dpi自己算 如果你要搞gdi算,那就的拿卡方去采样了。 话说你有多少个点,不是gdi说了算把,gdi自己本身根据dpi去插值的
.Steve 2020-04-10
  • 打赏
  • 举报
回复
不要用gdi,自己另外算

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧