我正在使用Visual Studio 2008(C#)中的Crystal Reports对象。报告构建良好,数据正确绑定。但是,当我尝试从源中调整IBlobFieldObject的大小时,缩放比例出现了偏差。
关于这种情况的两个说明。源图像为1024x768,我的最大宽度和高度为720x576。我的数学应该是正确的,我的新图像尺寸将为720x540(以适合最大宽度和高度准则)。当我这样做时,该比率是错误的:
img = Image.FromFile(path);
newWidth = img.Size.Width;
newHeight = img.Size.Height;
if ((img.Size.Width > 720) || (img.Size.Height > 576))
{
double ratio = Convert.ToDouble(img.Size.Width) / Convert.ToDouble(img.Size.Height);
if (ratio > 1.25) // Adjust width to 720, height will fall within range
{
newWidth = 720;
newHeight = Convert.ToInt32(Convert.ToDouble(img.Size.Height) * 720.0 / Convert.ToDouble(img.Size.Width));
}
else // Adjust height to 576, width will fall within range
{
newHeight = 576;
newWidth = Convert.ToInt32(Convert.ToDouble(img.Size.Width) * 576.0 / Convert.ToDouble(img.Size.Height));
}
imgRpt.Section3.ReportObjects["image"].Height = newHeight;
imgRpt.Section3.ReportObjects["image"].Width = newWidth;
}
我已经逐步检查了代码,以确保数学中的值正确,并且甚至保存了图像文件以确保宽高比正确(正确)。无论我如何尝试,图像都将被压缩-几乎就像在Crystal Reports设计器中关闭了“缩放”值一样(不是)。在此先感谢您的帮助!
最佳答案
Crystal Reports处理IBlobFieldObjects的方式存在几个问题。我遇到的第一个问题是,对于Crystal Reports的ReportObjects的Height和Width属性,内联文档不正确。它说这些值用缇表示,不是。例如:
ImageReport imgRpt = new ImageReport();
// The following value should be in PIXELS... NOT twips as the docs suggest!
imgRpt.Section3.ReportObjects["image"].Height = 300;
第二个问题与我正在执行的imageToByteArray转换有关。这是我使用的方法:
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
// The following line was ImageFormat.Jpeg, but it caused sizing issues
// in Crystal Reports. Changing to ImageFormat.Bmp made the squashed
// problems go away.
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
return ms.ToArray();
}
总而言之,Crystal Reports似乎更喜欢ImageFormat.Bmp来填充IBlobFieldObjects。现在,如果有人可以告诉我如何解决使用ImageFormat.Bmp的可怕位深度(这很可能是Crystal Reports Report对象处理图像数据的方式,并且可能无法修复),那么我已经准备就绪。
关于c# - Crystal Reports程序化图像调整大小...可以缩放吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2789607/