【问题标题】:Bitmap not seeing graphics位图看不到图形
【发布时间】:2014-10-25 16:57:21
【问题描述】:

我一直在寻找大约一周的时间来寻找答案,但我在这里有代码是徒劳的

    Dim bmap As Bitmap

    bmap = New Bitmap(PictureBox1.Width, PictureBox1.Height)

    Dim g As Graphics = graphics.FromImage(bmap)

    g.FillRectangle(Brushes.Black, 0, 0, 100, 100)

    For q As Integer = 0 To bmap.Width - 1

        For w As Integer = 0 To bmap.Height - 1

            If bmap.GetPixel(q, w) = Color.Black Then

                bmap.SetPixel(q, w, Color.Green)

            End If
        Next

    Next

   PictureBox1.Image = bmap

所以当我点击按钮时,它会绘制 100 x 100 黑框,但不会将像素设置为绿色

所以位图无法识别图形

【问题讨论】:

  • 您想要一个绿色矩形还是将所有黑色像素都涂成绿色?
  • 将所有黑色像素着色为绿色
  • If bmap.GetPixel(q, w).ToArgb = Color.Black.ToArgb Then...
  • 对比 bmap.GetPixel(q, w) = Color.FromArgb(&HFF000000) 也可以解决。看我的回答

标签: vb.net graphics bitmap


【解决方案1】:

From msdn about Color equality operator:

此方法比较超过Color 结构的ARGB 值。 它还比较了一些状态标志如果你愿意 只比较 ARGB 两个的值 Color 结构,比较它们 使用 ToArgb 方法。

所以要比较一个必须使用 ToArgb 方法

 If bmap.GetPixel(q, w).ToArgb = Color.Black.ToArgb Then

来自源代码的一些内部结构。 我们看到 对于Color.Black,即KnownColor,将调用此ctor

   internal Color(KnownColor knownColor) {
            value = 0;
            state = StateKnownColorValid;
            name = null;
            this.knownColor = (short)knownColor;
        }

但是对于GetPixel Color.FromArgb(value) 被调用

private Color(long value, short state, string name, KnownColor knownColor) {
            this.value = value;
            this.state = state;
            this.name = name;
            this.knownColor = (short)knownColor;
        }

 public static Color FromArgb(int argb) {
            return new Color((long)argb & 0xffffffff, StateARGBValueValid, null, (KnownColor)0);
        }

所以你的情况的另一个解决办法是

If bmap.GetPixel(q, w) = Color.FromArgb(&HFF000000) Then

【讨论】:

    猜你喜欢
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多