Как скопировать часть картинки
От: sus  
Дата: 11.05.06 07:32
Оценка:
Не знает ли всеведующий all, каким образом, используя System.Drawing namespace скопировать из одного System.Drawing.Bitmap заданную область (для простоты — прямоугольник) и ее поместить в другой Bitmap, в заданное место.
Re: Как скопировать часть картинки
От: anvaka Украина Yasiv
Дата: 11.05.06 07:57
Оценка:
Здравствуйте, sus, Вы писали:

sus>Каким образом скопировать из одного System.Drawing.Bitmap заданную область (для простоты — прямоугольник) в другой Bitmap, в заданное место.


static public Bitmap Copy(Bitmap srcBitmap, Rectangle section)
{
    // Create the new bitmap and associated graphics object
    Bitmap bmp = new Bitmap(section.Width, section.Height);
    Graphics g = Graphics.FromImage(bmp);

    // Draw the specified section of the source bitmap to the new one
    g.DrawImage(srcBitmap, 0, 0, section, GraphicsUnit.Pixel);

    // Clean up
    g.Dispose();

    // Return the bitmap
    return bmp;
}


Ы? Аль не Ы?
Re[2]: Как скопировать часть картинки
От: krasin Россия  
Дата: 11.05.06 08:39
Оценка:
Здравствуйте, anvaka, Вы писали:

A>Здравствуйте, sus, Вы писали:


sus>>Каким образом скопировать из одного System.Drawing.Bitmap заданную область (для простоты — прямоугольник) в другой Bitmap, в заданное место.


static public Bitmap Copy(Bitmap srcBitmap, Rectangle section)
{
    // Create the new bitmap and associated graphics object
    Bitmap bmp = new Bitmap(section.Width, section.Height);
    using (Graphics g = Graphics.FromImage(bmp))
    {
      // Draw the specified section of the source bitmap to the new one
      g.DrawImage(srcBitmap, 0, 0, section, GraphicsUnit.Pixel);
    }

    // Return the bitmap
    return bmp;
}


using все же рулит — и проще и более ошибкоустойчивый код получается
Re[3]: Как скопировать часть картинки
От: DemAS http://demas.me
Дата: 11.05.06 08:46
Оценка:
Здравствуйте, krasin, Вы писали:

А то, что мы Bitmap создали, но не уничтожили — ничего страшного?

K>using все же рулит — и проще и более ошибкоустойчивый код получается
... << RSDN@Home 1.2.0 alpha rev. 643>>
Re[2]: Как скопировать часть картинки
От: sus  
Дата: 11.05.06 10:58
Оценка:
Здравствуйте, anvaka, Вы писали:

<поскипано>
A>Ы? Аль не Ы?

Спастбо, идея понятна. Сделал как в примере:
  imgList1.ImageSize = new Size(50, 50);
  System.Drawing.Image img = System.Drawing.Image.FromFile("Black and White.bmp");
  Rectangle section = new Rectangle(0, 0, 50, 50);
  System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(section.Width, section.Height);
  Graphics g = Graphics.FromImage(bmp);
  g.DrawImage(img, 0, 0, section, GraphicsUnit.Pixel);
  imgList1.Images.Add(bmp);

После этого, в bmp (и в ImageList'е, соответственно, тоже) изображение строго 50х50, но, скажем так немного увеличенное, по сравнению с тем, что есть в файле. То есть все выглядит так, как если бы я взял изображение из файла, затем увелиличил его (процентов на 20), затем вырезал из него квадрат 50х50 и скопировал в новый bitmap. Это собственно рождает вопрос — где я мог напарить?
Re[4]: Как скопировать часть картинки
От: krasin Россия  
Дата: 11.05.06 11:14
Оценка:
Здравствуйте, DemAS, Вы писали:

DAS>Здравствуйте, krasin, Вы писали:


DAS> А то, что мы Bitmap создали, но не уничтожили — ничего страшного?


Да, по-хорошему надо и Bitmap в случае исключения во время исполнения метода Dispose-ить.
Re[3]: Как скопировать часть картинки
От: sus  
Дата: 11.05.06 12:18
Оценка:
Разобрался сам после более вдумчивого чтения MSDN. На всякий случай — правильный ответ.

  imgList1.ImageSize = new Size(50, 50);
  System.Drawing.Image img = System.Drawing.Image.FromFile("Black and White.bmp");
  Rectangle section = new Rectangle(0, 0, 50, 50);
  System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(section.Width, section.Height);
  Graphics g = Graphics.FromImage(bmp);
  g.DrawImage(img, section, 0, 0, section.Width, section.Height, GraphicsUnit.Pixel);
  // вместо:
  // g.DrawImage(img, 0, 0, section, GraphicsUnit.Pixel);
  imgList1.Images.Add(bmp);

Дело в том, что использованная в первом случае функция использовала разрешение изображения из файла (72dpi) при выводе на экран с другим разрешением (96dpi). При использовании указанной функции — происходит перемасштабирование изображения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.