О, я забыл упомянуть. Bitmap.SetResolution
может помочь с проблемами соотношения сторон. Ниже приведено только изменение размера.
Оформить Эта страница . Здесь обсуждаются два механизма изменения размера. Я подозреваю, что в вашем случае билинейная фильтрация на самом деле плохая идея, поскольку вы, вероятно, хотите, чтобы все было красиво и монохромно.
Ниже приведена копия наивного алгоритма изменения размера (написанного Кристианом Граусом со страницы, указанной выше), который должен быть тем, что вы хотите.
public static Bitmap Resize(Bitmap b, int nWidth, int nHeight)
{
Bitmap bTemp = (Bitmap)b.Clone();
b = new Bitmap(nWidth, nHeight, bTemp.PixelFormat);
double nXFactor = (double)bTemp.Width/(double)nWidth;
double nYFactor = (double)bTemp.Height/(double)nHeight;
for (int x = 0; x < b.Width; ++x)
for (int y = 0; y < b.Height; ++y)
b.SetPixel(x, y, bTemp.GetPixel((int)(Math.Floor(x * nXFactor)),
(int)(Math.Floor(y * nYFactor))));
return b;
}
Альтернативный механизм заключается в злоупотреблении функцией GetThumbNailImage
, например this . Этот код поддерживает соотношение сторон, но удаление кода, который делает это, должно быть простым.