40

问这个问题很尴尬,但找不到答案。

我徒劳地尝试了这个。

Image resultImage = new Bitmap(image1.Width, image1.Height, PixelFormat.Format24bppRgb);

using (Graphics grp = Graphics.FromImage(resultImage)) 
{
    grp.FillRectangle(
        Brushes.White, 0, 0, image1.Width, image1.Height);
    resultImage = new Bitmap(image1.Width, image1.Height, grp);
}

我基本上想在 C# 中用白色填充 1024x1024 RGB 位图图像。我怎样才能做到这一点?

4

5 回答 5

39

你几乎拥有它:

private Bitmap DrawFilledRectangle(int x, int y)
{
    Bitmap bmp = new Bitmap(x, y);
    using (Graphics graph = Graphics.FromImage(bmp))
    {
        Rectangle ImageSize = new Rectangle(0,0,x,y);
        graph.FillRectangle(Brushes.White, ImageSize);
    }
    return bmp;
}
于 2012-09-19T20:35:48.177 回答
33

您正在为 分配一个新图像resultImage,从而覆盖您之前创建白色图像的尝试(顺便说一句,这应该会成功)。

所以只需删除该行

resultImage = new Bitmap(image1.Width, image1.Height, grp);
于 2012-09-19T20:30:05.573 回答
23

另一种方法,

创建单位位图

var b = new Bitmap(1, 1);
b.SetPixel(0, 0, Color.White);

并对其进行缩放

var result = new Bitmap(b, 1024, 1024);
于 2012-09-19T21:05:34.130 回答
5

Graphics.Clear(颜色)

Bitmap bmp = new Bitmap(1024, 1024);
using (Graphics g = Graphics.FromImage(bmp)){g.Clear(Color.White);}
于 2019-03-12T06:27:11.647 回答
1

根据您的需要,BitmapSource可能适合。您可以使用Enumerable.Repeat()快速用0xff(即白色)填充字节数组。

int w = 1024;
int h = 1024;
byte[] pix = Enumerable.Repeat((byte)0xff, w * h * 4).ToArray();
SomeImage.Source = BitmapSource.Create(w, h, 96, 96, PixelFormats.Pbgra32, null, pix, w * 4);
于 2021-01-16T23:25:37.067 回答