Я хочу изменить размер изображения с помощью библиотеки GDI, чтобы при изменении его размера оно было больше, чем раньше, чтобы не было смешения. (Как при увеличении изображения в программе рисования)
EG: если мое изображение имеет ширину 2 пикселя и высоту 2 пикселя
(белый, белый,
белый, черный)
и я изменяю его размер, чтобы он был на 100% больше, это 4px на 4px высотой
(белый, белый, белый, белый,
белый, белый, белый, белый,
белый, белый, черный, черный,
белый, белый, черный, черный)
Какой режим InterpolationMode или Smoothing (или другие свойства) графического объекта можно использовать для достижения этой цели? Все комбинации, которые я пробовал до сих пор, вызывают появление серого на тестовом изображении.
Вот код, который я использую
/// <summary>
/// Do the resize using GDI+
/// Credit to the original author
/// http://www.bryanrobson.net/dnn/Code/Imageresizing/tabid/69/Default.aspx
/// </summary>
/// <param name="srcBitmap">The source bitmap to be resized</param>
/// <param name="width">The target width</param>
/// <param name="height">The target height</param>
/// <param name="isHighQuality">Shoule the resize be done at high quality?</param>
/// <returns>The resized Bitmap</returns>
public static Bitmap Resize(Bitmap srcBitmap, int width, int height, bool isHighQuality)
{
// Create the destination Bitmap, and set its resolution
Bitmap destBitmap = new Bitmap((int)Convert.ToInt32(width), (int)Convert.ToInt32(height), PixelFormat.Format24bppRgb);
destBitmap.SetResolution(srcBitmap.HorizontalResolution, srcBitmap.VerticalResolution);
// Create a Graphics object from the destination Bitmap, and set the quality
Graphics grPhoto = Graphics.FromImage(destBitmap);
if (isHighQuality)
{
grPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
}
else
{
grPhoto.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; //? this doesn't work
grPhoto.InterpolationMode = InterpolationMode.NearestNeighbor; //? this doesn't work
}
// Do the resize
grPhoto.DrawImage(srcBitmap,
new Rectangle(0, 0, width, height),
new Rectangle(0, 0, srcBitmap.Width, srcBitmap.Height),
GraphicsUnit.Pixel);
grPhoto.Dispose();
return destBitmap;
}