Как заполнить растровое изображение сплошным цветом? - PullRequest
34 голосов
/ 12 ноября 2009

Мне нужно создать 24-битное растровое изображение (разрешение 100x100 пикселей), используя уникальный цвет RGB, и сохранить сгенерированное изображение на диск. В настоящее время я использую функцию SetPixel, но она очень медленная.

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

Есть ли более быстрый метод, чем SetPixel? Заранее спасибо.

Ответы [ 8 ]

51 голосов
/ 12 ноября 2009

Это должно делать то, что вам нужно. Это заполнит весь точечный рисунок указанным цветом.

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);
}
23 голосов
/ 20 февраля 2017
Bitmap bmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Green);
6 голосов
/ 12 ноября 2009

Это зависит от того, чего вы пытаетесь достичь, но обычно вы используете 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); 
3 голосов
/ 12 ноября 2009

Вы можете использовать LockBits для ускорения записи пикселей (доступ по указателю вместо вызова метода на пиксель).

2 голосов
/ 11 апреля 2012

всегда Работа с регионами ( прямоугольник ) намного быстрее, чем при использовании отдельных пикселей .

2 голосов
/ 12 ноября 2009

Вы избалованы выбором здесь: -)

Альтернативой использованию GDI + является использование WPF (см. RenderTargetBitmap.Render .)

Также см. этот вопрос .

1 голос
/ 29 июня 2017

Создание растрового объекта BMP размера s (высота, ширина) и цвета 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);
}
0 голосов
/ 12 ноября 2009

Предлагаю проверить библиотеку GD.

Я вполне уверен, что есть библиотека c #. http://www.boutell.com/gd/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...