Привести графику к изображению в C # - PullRequest
2 голосов
/ 12 апреля 2010

У меня есть картинка в форме Windows.

Я делаю следующее, чтобы загрузить в него файл PNG.

Bitmap bm = (Bitmap)Image.FromFile("Image.PNG", true);
Bitmap tmp;

public Form1() {
    InitializeComponent();
    this.tmp = new Bitmap(bm.Width, bm.Height);
}

private void pictureBox1_Paint(object sender, PaintEventArgs e) {
    e.Graphics.DrawImage(this.bm, new Rectangle(0, 0, tmp.Width, tmp.Height), 0, 0, tmp.Width, tmp.Height, GraphicsUnit.Pixel);
}

Однако мне нужно нарисовать что-то на изображении, а затем снова отобразить результат. Рисование прямоугольников может быть выполнено только через класс Graphics.

Мне нужно нарисовать необходимые прямоугольники на изображении, снова сделать его экземпляром класса Image и сохранить его в this.bm

Я могу добавить кнопку, которая выполняет this.pictureBox1.Refresh();, заставляя PictureBox быть заново нарисованным, но я не могу привести Graphics к Image. Из-за этого я не могу сохранить изменения в растровое изображение this.bm.

Это моя проблема, и я не вижу выхода.

1 Ответ

9 голосов
/ 12 апреля 2010

Вам нужно использовать метод Graphics.FromImage , который позволит вам рисовать непосредственно на изображении вместо временного объекта Graphics, созданного из метода Paint: 1005 *

using (Graphics g = Graphics.FromImage(this.bm))
{
    g.DrawRectangle(...);
}

Делайте это вместо (или в дополнение к) перехвата Paint метода PictureBox. Таким образом, вам вообще не нужно будет использовать временное изображение или объект Graphics, а когда вы закончите изменять исходное растровое изображение (this.bm), вы можете вызвать pictureBox1.Refresh, чтобы заставить изображение -displayed.

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