Функция GDI+ DrawImage

Есть что-то, чего мне не хватает. Скажем, у меня есть следующий код:

private Bitmap source = new Bitmap (some_stream);
Bitmap bmp = new Bitmap(100,100);
Rectangle newRect = new Rectangle(0, 0, bmp.Width, bmp.Height);
Rectangle toZoom= new Rectangle(0, 0, 10, 10);

Graphics g = Graphics.FromImage(bmp);
g.DrawImage(source, newRect, toZoom, GraphicsUnit.Pixel);

Моя цель - увеличить 10x10 пикселей в верхнем левом углу исходного изображения. После того, как я создал графический объект g и вызвал DrawImage: запрошенный прямоугольник (toZoom) будет скопирован в bmp, или он будет отображаться на экране? Я немного запутался, может кто-нибудь объяснить?


person ET.    schedule 16.04.2010    source источник


Ответы (2)


Ваш код даст вам только растровое изображение в памяти (которое не будет автоматически отображаться на экране). Простым способом отобразить это было бы поместить 100 x 100 PictureBox в вашу форму и установить его свойство Image следующим образом (используя Bitmap из вашего кода выше):

pictureBox1.Image = bmp;

Кроме того, вам понадобится несколько блоков using в вашем коде:

using (private Bitmap source = new Bitmap (some_stream))
{
    Bitmap bmp = new Bitmap(100,100);
    Rectangle newRect = new Rectangle(0, 0, bmp.Width, bmp.Height);
    Rectangle toZoom= new Rectangle(0, 0, 10, 10);
    using (Graphics g = Graphics.FromImage(bmp))
    {
        g.DrawImage(source, newRect, toZoom, GraphicsUnit.Pixel);
    }
    pictureBox1.Image = bmp;
}

Обратите внимание, что нет блока using с bmp — это потому, что вы устанавливаете его как свойство изображения PictureBox. Блок using автоматически вызывает метод Dispose объекта в конце области действия блока, чего вы не хотите делать, поскольку он все еще будет использоваться.

person MusiGenesis    schedule 16.04.2010

он будет скопирован и не будет отображаться.

person Muad'Dib    schedule 16.04.2010