【问题标题】:C# alternative to setpixelC# 替代 setpixel
【发布时间】:2012-06-25 15:42:40
【问题描述】:

我已经阅读了几篇可以替代使用 setpixel/getpixel 的文章,但我没有看到它们与我的问题有何关系。

我有一个多色图像(取决于从 DB 获取的动态值)将每个像素颜色组的颜色更改为新颜色。

假设我希望 Argb 值为 -989556 的所有像素都更改为 -16,并且 Argb 值为 -1331 的所有像素都更改为 -5383962。 我目前正在查看位图中的每个像素并检查它们的值,如果它们匹配,则使用 setpixel 更改它们。

我确信一定有更好的方法,但我太昏暗了,看不到它!

【问题讨论】:

  • 您在使用 GetPixel()/SetPixel() 时遇到了什么问题?请告诉我们您正在针对哪些 UI 库进行编码,WinForms、WPF、SilverLight...
  • 在网络上设置/getpixel 太慢了(图像是动态创建的)。只需通过 .net Web 应用程序使用它,通过通用处理程序传递图像。
  • 我会检查颜色转换矩阵 - 谢谢你的建议..
  • @Slugart:我(暂时)添加了 gdi+ 标签,因为这似乎是每个人都在谈论的(if 每个人都在谈论相同的 API,即)。如果不说明,这个问题可能对未来的访问者有点无用。
  • @T1gg3rB0unC3,对于未来的问题,请避免添加“感谢信”,而是对好的答案投票并接受。同样,每当您说“更好的方式”时,请尝试指定应该以哪种方式“更好”。 IE。在这个问题中,您可能想要“更快”...

标签: c# gdi+ getpixel


【解决方案1】:

看看ImageAttributes.SetRemapTable

Another 示例。

【讨论】:

  • 完美 - 这是一种享受 - 非常感谢您的建议! :)
【解决方案2】:

如果您要更改整个颜色,那么您可能不想在每个像素的基础上更改它们。有一个颜色转换矩阵应该允许您在几行代码中更改图像中颜色的所有像素,而无需循环和操作图像的每个像素,这非常慢。

查看这些链接:

http://msdn.microsoft.com/en-us/library/6tf7sa87(v=vs.71).aspx

http://msdn.microsoft.com/en-us/library/system.drawing.imaging.colormatrix.aspx

【讨论】:

  • 转换是一个好主意,只要 OP 允许值溢出并且没有被限制。我记得今年(4 年或更长时间)之前尝试过,这对我来说是个问题,所以我最终只是简单地打电话给 LockBits 并直接在内存中完成这项工作。
  • 我自己从来没有真正使用过颜色矩阵类,但使用过各种形式的锁定位或固定数组并取得了巨大成功。
【解决方案3】:

使用位图、BitBlt 功能。我在here 中展示了一个示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多