2010-04-16 5 views
1

Есть кое-что, что мне не хватает. Скажем, у меня есть следующий код:Функция 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 или будет отображаться на экране? Я немного смущен, может кто-нибудь прояснить?

ответ

1

Этот код предоставит вам только растровое изображение в памяти (которое автоматически не будет отображаться на экране). Простой способ, чтобы отобразить это было бы поставить 100 х 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 объекта в конце области действия блока, который вы не хотите делать, поскольку он все еще будет использоваться.

0

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

Смежные вопросы