2015-10-09 5 views
0

Мне нужно масштабировать изображение, и у меня есть проблема с использованием графики для этого. Я использую DrawImage, передаю исходное изображение, новое местоположение (0, 0) и новый размер. Изображение результата масштабируется, но его верхний и левый края прозрачны. Кто-нибудь знает, почему? Мой код:Различия при масштабировании изображений

Rectangle DstRec = new Rectangle(0, 0, (int) (CurrentImage.ImgBM.Width * Zoom), (int) (CurrentImage.ImgBM.Height * Zoom)); 
//ReducedBM = new Bitmap((int)(CurrentImage.ImgBM.Width * Zoom), (int)(CurrentImage.ImgBM.Height * Zoom)); 
ReducedBM = new Bitmap(CurrentImage.ImgBM, DstRec.Width, DstRec.Height); 
Graphics g = Graphics.FromImage(ReducedBM); 
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; 
//g.DrawImage(CurrentImage.ImgBM, 0, 0, (int)(CurrentImage.ImgBM.Width * Zoom), (int)(CurrentImage.ImgBM.Height * Zoom)); 
g.DrawImage(CurrentImage.ImgBM, DstRec); 
g.Dispose(); 
+0

Если вы используете перегрузку конструктора, которая выполняет все масштабирование, зачем рисовать изображение снова? Масштабирование должно выполняться со второй строкой, нет? - Или используйте перегрузку DrawImage с двумя прямоугольниками! – TaW

ответ

0

Я думаю, что проблема с этой линии:

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; 

изменить его к этому.

g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
+0

Это не изменило anytinhg, но когда я использую NearestNeighbor, все в порядке, но изображение уродливое – legier

+0

Теперь мы теперь, что это проблема интерполяции, но до сих пор не знаю почему. По умолчанию интерполяция тоже в порядке. – legier

+1

Посмотрите эту статью: https://blog.mariusschulz.com/2014/05/28/preventing-ghost-borders-when-resizing-images-with-system-drawing –

Смежные вопросы