Не знает ли всеведующий all, каким образом, используя System.Drawing namespace скопировать из одного System.Drawing.Bitmap заданную область (для простоты — прямоугольник) и ее поместить в другой Bitmap, в заданное место.
Здравствуйте, 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 bitmapreturn bmp;
}
Здравствуйте, 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 bitmapreturn bmp;
}
using все же рулит — и проще и более ошибкоустойчивый код получается
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. Это собственно рождает вопрос — где я мог напарить?
Разобрался сам после более вдумчивого чтения 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). При использовании указанной функции — происходит перемасштабирование изображения.