web-dev-qa-db-ja.com

ビットマップを単色で塗りつぶすにはどうすればよいですか?

一意のRGBカラーを使用して24ビットのビットマップ(解像度100x100ピクセル)を作成し、生成されたイメージをディスクに保存する必要があります。現在、 SetPixel 関数を使用していますが、非常に遅いです。

Bitmap Bmp = new Bitmap(width, height);
//...
//...
Bmp.SetPixel(x,y,Color.FromARGB(redvalue, greenvalue, bluevalue));

SetPixelより速い方法はありますか?前もって感謝します。

36
Salvador

これはあなたがそれを必要とすることをするはずです。指定した色でビットマップ全体を塗りつぶします。

Bitmap Bmp = new Bitmap(width, height);
using (Graphics gfx = Graphics.FromImage(Bmp))
using (SolidBrush brush = new SolidBrush(Color.FromArgb(redvalue, greenvalue, bluevalue)))
{
    gfx.FillRectangle(brush, 0, 0, width, height);
}
52
Jeromy Irvine
Bitmap bmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Green);
24
Sam Saarian

何を達成しようとしているかによって異なりますが、通常はグラフィックスオブジェクトを取得して描画することでGDI +を使用します。

Graphics g = Graphics.FromImage(bitmap); 

実際には大きなテーマです。初心者向けのチュートリアルをいくつか紹介します。 GDI +チュートリアル

以下は、グラデーションで塗りつぶした長方形を描くチュートリアルのスニペットです。

Rectangle rect = new Rectangle(50, 30, 100, 100); 
LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Red, Color.Yellow, LinearGradientMode.BackwardDiagonal); 
g.FillRectangle(lBrush, rect); 
6
Ryan Cook

LockBits を使用して、ピクセルの書き込みを高速化できます(ピクセルごとのメソッド呼び出しの代わりにポインターアクセス)。

3
Gonzalo

常にregionsrectangle)を使用すると、個々のピクセルを使用するよりもはるかに高速です

2

ここでの選択は甘やかされています:-)

GDI +を使用する代わりに、WPFを使用することもできます( RenderTargetBitmap.Render を参照)。

この質問 も参照してください。

2
Andrew Shepherd

サイズs(高さ、幅)および色のビットマップオブジェクトbmpの作成c。

bmp=CreateBmp( c , s );

ビットマップを返すCreateBmpメソッド:

Bitmap CreateBmp(Color c, Size s)
{
    Bitmap temp =new Bitmap(1,1);
    temp.SetPixel(1,1,c);
    return new Bitmap(temp, s);
}
1
Srivishnu

Gd Libraryをチェックすることをお勧めします。

私はむしろC#ライブラリがあると確信しています。 http://www.boutell.com/Gd/

0
David