c# - Crystal Reports 程序化图像调整大小...缩放?

标签 c# crystal-reports image-processing reporting

我在 Visual Studio 2008 (C#) 中使用 Crystal Reports 对象。报告构建良好,数据绑定(bind)正确。但是,当我尝试从源中调整 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 的高度和宽度属性不正确。它说这些值以缇表示,但它们不是。例如:

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 来填充 IBlobFieldObject。现在,如果有人能告诉我如何解决使用 ImageFormat.Bmp 时可怕的位深度(这很可能是 Crystal Reports Report 对象处理图像数据的方式,并且可能无法修复),我会准备就绪。

关于c# - Crystal Reports 程序化图像调整大小...缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2789607/

相关文章:

c# - 在 ASP.NET Core 依赖注入(inject)中使用工厂模式

c# - 如何仅在满足特定条件时自动增加复合键 ID?

mysql - 如何在 Crystal Reports 或 SQL 中的单行中显示多行的列数据

java - Crystal 报表 Eclipse MS Access

debugging - 如何 grep(搜索)Crystal 报表以用于列的所有用途?

python - 使用python选择图像的区域

c# - 将所选行从 ListView 显示到文本框?

c# - 在运行时重新分配事件处理程序

android - xml图像占用了太多内存 - android

c - 将提取的帧名称存储在数组中 - ffmpeg