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