我正在尝试裁剪图像。我已经找到了多种方法来做到这一点,但是没有一种方法可以表现我的想法。裁剪图像后,我将其发送到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();
有趣的是,当我尝试使用tiff图像并更改上下文类型时,我收到了一个通用的GDI +错误。从研究来看,这看起来像是一个寻求问题,但也不确定如何解决它。
答案 0 :(得分:1)
使用PDF时,您必须记住您正在查看打印分辨率而不是屏幕分辨率。
在1280 x 1024分辨率的显示器上,600 x 600像素的图像将占据屏幕宽度的大约一半。
但是,如果打印输出为200 dpi,它将占用3英寸,但如果设置为300 dpi,则仅占用2英寸。
我对PDF格式的了解不足以说明你需要做些什么才能让它发挥作用,但我的猜测是你需要通过输出的dpi从纸张上的物理尺寸开始工作。得到图像的像素大小:
pixel width = physical width * dpi
答案 1 :(得分:0)
关于GDI +错误问题,请先尝试保存到内存流,然后将其复制到Response.OutputStream。如果Tiff与PNG类似,那么该流确实需要是可搜索的。