C# - изменение размера холста изображения (сохранение исходных размеров пикселей исходного изображения)

моя цель-взять файл изображения и увеличить размеры до следующей степени двух при сохранении пикселей, как они есть (ака не масштабирование исходного изображения). Таким образом, в основном конечным результатом будет исходное изображение, плюс дополнительное белое пространство, охватывающее правую и нижнюю часть изображения, поэтому общие размеры равны двум.

Ниже приведен мой код, который я использую прямо сейчас; который создает изображение с правильными размерами, но исходные данные немного чешуйчатый и обрезанный по какой-то причине.

// Load the image and determine new dimensions
System.Drawing.Image img = System.Drawing.Image.FromFile(srcFilePath);
Size szDimensions = new Size(GetNextPwr2(img.Width), GetNextPwr2(img.Height));

// Create blank canvas
Bitmap resizedImg = new Bitmap(szDimensions.Width, szDimensions.Height);
Graphics gfx = Graphics.FromImage(resizedImg);

// Paste source image on blank canvas, then save it as .png
gfx.DrawImageUnscaled(img, 0, 0);
resizedImg.Save(newFilePath, System.Drawing.Imaging.ImageFormat.Png);

похоже, что исходное изображение масштабируется на основе новой разницы в размере холста, хотя я использую функцию DrawImageUnscaled (). Пожалуйста, сообщите мне, что я делаю неправильно.

2 ответов


метод DrawImageUnscaled не рисует изображение в исходном размере pizel, вместо этого он использует разрешение (пиксели на дюйм) исходного и целевого изображений для масштабирования изображения, чтобы оно было нарисовано с теми же физическими размерами.

использовать DrawImage метод вместо того, чтобы рисовать изображение, используя исходный размер пикселя:

gfx.DrawImage(img, 0, 0, img.Width, img.Height);

использовать DrawImage вместо этого с одной из перегрузок, где вы явно указываете прямоугольник назначения (используя прямоугольник того же размера, что и исходное исходное изображение).

см.:http://support.microsoft.com/?id=317174