2009-11-12 45 views
27

我需要使用獨特的RGB顏色創建24位位圖(分辨率爲100x100像素),並將生成的圖像保存到磁盤。我目前使用的功能是SetPixel,但速度非常慢。如何用純色填充位圖?

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

有沒有比SetPixel更快的方法?提前致謝。

回答

40

這應該做你所需要的。它將用指定的顏色填充整個位圖。

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); 
} 
+0

非常感謝。 – Salvador 2009-11-13 01:04:35

+0

這顯示瞭如何從另一個位圖製作位圖。 – 2016-03-31 23:36:26

+2

@SanuelJackson所以你低估了這個答案,因爲它回答了OP的實際問題,而不是他的問題的標題? – 2016-04-01 13:39:46

6

這取決於你所要完成的是什麼,但通常你會使用GDI +通過獲取一個圖形對象,然後繪製它:

Graphics g = Graphics.FromImage(bitmap); 

它實際上是一個大課題,這裏有一些初學者教程: GDI+ Tutorials

以下是教程中使用漸變填充繪製矩形的代碼片段。

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

1爲GDI +建議。 – Salvador 2009-11-13 01:05:10

3

你可以使用LockBits用來加快寫像素(指針訪問而不是每個像素方法調用)。

2

總是地區矩形)工作比使用單個像素快得多。

7
Bitmap bmp = new Bitmap(width, height); 
Graphics g = Graphics.FromImage(bmp); 
g.Clear(Color.Green); 
+0

你能否提供給我們更多與你的答案有關的細節。謝謝 – Robert 2017-02-20 20:05:00

+0

這是這裏最好的答案。根據我的經驗,當清除整個圖像時,「清除」比調用「FillRectangle」要快。 – 2017-05-19 10:44:33

+0

圖形_ **清除** _方法清除整個圖面並用指定的背景色填充。沒有必要手動填充它,這是_ ** clear ** _方法具有的選項。請看[msdn](https://msdn.microsoft.com/en-us/library/system.drawing.graphics.clear(v = vs.110).aspx)解釋。 – 2017-06-27 04:25:45

0

創建大小爲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); 
}