Bitmap.Clone создает изображение, которое в 4 раза больше выходного размера, чем оригинал - PullRequest
1 голос
/ 30 ноября 2011

Итак, у меня есть приложение, которое берет исходное изображение, получает новую новую обрезанную область, а затем сохраняет обрезанную версию изображения в виде нового файла. Он отлично работает с одним существенным недостатком. Новое изображение в среднем в 4 раза больше исходного изображения. В моем тесте у меня была фотография, размер которой на диске ~ 4,5 МБ, а урезанная версия (которая правильно обрезана и выглядит хорошо) составляет ~ 21 МБ на диске. Код выглядит следующим образом:

var originalImage = new Bitmap(imagePath);
var fWidth = originalImage.PhysicalDimension.Width;
var fHeight = originalImage.PhysicalDimension.Height;   

float calculatedWidth = GetCroppedWidth();
float calculatedHeight = GetCroppedHeight();

//Draw the image by centering the cropped region on the original
var heightOffset = (fHeight - calculatedHeight) / 2;
var widthOffset = (fWidth - calculatedWidth) / 2;
var sourceRectF = new RectangleF(widthOffset, heightOffset, calculatedWidth, calculatedHeight);
var croppedImage = originalImage.Clone(sourceRectF, originalImage.PixelFormat);

//Save the image
croppedImage.Save(croppedFileName);

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Звучит так, как будто загружаемое вами изображение - это какой-то другой формат, кроме BMP (например, PNG или JPG).

Используйте другую перегрузку Bitmap.Save, которая указала ImageFormat

0 голосов
/ 30 ноября 2011

Посмотрите на Bitmap.Save overload , который позволяет вам выбрать выходной формат.По умолчанию это Bmp, я думаю, у которого нет сжатия.

, поэтому в вашем случае используйте

croppedImage.Save(croppedFileName, originalImage.RawFormat);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...