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 に答える
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 に答える