gpt4 book ai didi

c# - Bitmap.GetPixel() 返回错误值

转载 作者:行者123 更新时间:2023-11-30 12:30:59 24 4
gpt4 key购买 nike

我在从生成的位图中读回像素值时遇到了一些问题。我首先使用以下代码在我的类中生成一个名为 maskBitmap 的位图:

    void generateMaskBitmap()
{
if (inputBitmap != null)
{
Bitmap tempBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(tempBitmap))
{
Brush brush = Brushes.Black;
for (int y = 0; y < tempBitmap.Height; y += circleSpacing)
{
for (int x = 0; x < tempBitmap.Width; x += circleSpacing)
{
g.FillEllipse(brush, x, y, circleDiameter, circleDiameter);
}
}
g.Flush();
}

maskBitmap = (Bitmap)tempBitmap.Clone();
}
}

然后我尝试使用以下代码将 mask 应用于我的原始图像:

    void generateOutputBitmap()
{
if (inputBitmap != null && maskBitmap != null)
{
Bitmap tempBitmap = new Bitmap(inputBitmap.Width, inputBitmap.Height);
for (int y = 0; y < tempBitmap.Height; y++)
{
for (int x = 0; x < tempBitmap.Width; x++)
{
Color tempColor = maskBitmap.GetPixel(x, y);

if (tempColor == Color.Black)
{
tempBitmap.SetPixel(x, y, inputBitmap.GetPixel(x, y));
}
else
{
tempBitmap.SetPixel(x, y, Color.White);
}
}
}
outputBitmap = tempBitmap;
}
}

mask 位图已成功生成并在图片框中可见,但是在测试“tempColor”时每个像素的颜色值显示为空(A = 0,R = 0,G = 0, B = 0)。我知道 getpixel/setpixel 的性能问题,但这不是这个项目的问题。我还知道 "tempColor == Color.Black" 不是有效测试,但这只是我的比较代码的占位符。

最佳答案

我无法重现您的问题。我复制并粘贴了您的代码并进行了一些修改以使其适用于我。我能够确认 tempColor 有时是 #FF000000。

我怀疑您在某处混淆了位图引用。您真的确定您从不得到#00000000 以外的任何值吗?您的 circleDiametercircleSpacing 是否具有合理的值?最重要的是:您绝对确定您正在从正确的位图中读取数据吗?

这是我的代码版本,我知道它可以工作:

using System;
using System.Drawing;

namespace Test
{
class Program
{
static void Main()
{
var bitmap = GenerateMaskBitmap(100, 100);
TestMaskBitmap(bitmap);
}

const int CircleDiameter = 10;
const int CircleSpacing = 10;

static Bitmap GenerateMaskBitmap(int width, int height)
{
Bitmap maskBitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(maskBitmap))
{
Brush brush = Brushes.Black;
for (int y = 0; y < maskBitmap.Height; y += CircleSpacing)
{
for (int x = 0; x < maskBitmap.Width; x += CircleSpacing)
{
g.FillEllipse(brush, x, y, CircleDiameter, CircleDiameter);
}
}
g.Flush();
}

return maskBitmap;
}

static void TestMaskBitmap(Bitmap maskBitmap)
{
for (int y = 0; y < maskBitmap.Height; y++)
{
for (int x = 0; x < maskBitmap.Width; x++)
{
Color tempColor = maskBitmap.GetPixel(x, y);

if (tempColor.ToArgb() != 0)
throw new Exception("It works!");
}
}
}
}
}

关于c# - Bitmap.GetPixel() 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14885933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com