Я пытаюсь обрезать изображение. Я нашел несколько способов сделать это, однако ни один не работает так, как мне бы хотелось. Как только изображение обрезается, я отправляю его в генератор PDF. Если я отправляю обычный jpg, он работает нормально, однако, если я обрезаю изображение, оно не попадает в PDF с правильным размером. Я думаю, что это может быть связано с разрешением.
В html-виде он выглядит хорошо, но при публикации в PDF изображение получается меньше ожидаемого.
Вот код обрезки, который я использую:
try
{
System.Drawing.Image image = System.Drawing.Image.FromFile(img);
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
Graphics gfx = Graphics.FromImage(bmp);
gfx.SmoothingMode = SmoothingMode.AntiAlias;
gfx.InterpolationMode = InterpolationMode.HighQualityBicubic;
gfx.PixelOffsetMode = PixelOffsetMode.HighQuality;
gfx.DrawImage(image, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel);
// Dispose to free up resources
image.Dispose();
//bmp.Dispose();
gfx.Dispose();
return bmp;
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
return null;
}
Я также пробовал это:
Bitmap temp = (Bitmap)System.Drawing.Image.FromFile(img);
Bitmap bmap = (Bitmap)temp.Clone();
if (xPosition + width > temp.Width)
width = temp.Width - xPosition;
if (yPosition + height > temp.Height)
height = temp.Height - yPosition;
Rectangle rect = new Rectangle(xPosition, yPosition, width, height);
temp = (Bitmap)bmap.Clone(rect, bmap.PixelFormat);
Я записываю это в контекстный поток:
Bitmap bm = Helper.CropImage(@"MyFileLocation", 0, 0, 300, 223);
context.Response.ContentType = "image/jpg";
bm.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
bm.Dispose();
Интересно, что когда я пытаюсь изменить изображение и изменить тип контекста, я получаю общую ошибку GDI +. По результатам исследований это выглядит как вопрос поиска, но не уверен, как его решить.