Crystal Reports程序化图像大小调整......规模?

时间:2010-05-07 15:14:18

标签: c# crystal-reports image-processing reporting

我正在使用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设计器中的Scale值关闭一样(它们不是)。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

Crystal Reports处理IBlobFieldObjects的方式存在一些问题。我遇到的第一个问题是内联文档对于Crystal Reports的ReportObjects的高度和宽度属性是不正确的。它表示值是以缇为单位表示的,但它们并非如此。例如:

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对象处理图像数据的方式,并且可能无法修复),我将全部设置。