Изменение размеров изображения в Crystal Reports ... Масштаб? - PullRequest
2 голосов
/ 07 мая 2010

Я работаю с объектом Crystal Reports в Visual Studio 2008 (C #). Отчет строится нормально, а данные привязаны правильно. Однако, когда я пытаюсь изменить размер 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;
}

Я прошел по коду, чтобы убедиться, что значения верны из математики, и я даже сохранил файл изображения, чтобы убедиться, что соотношение сторон правильное (оно было). Несмотря на то, что я пытаюсь сделать, изображение сжимается - как будто значения Scale отключены в конструкторе Crystal Reports (это не так). Заранее спасибо за любую помощь!

1 Ответ

2 голосов
/ 12 мая 2010

Существует несколько проблем, связанных с тем, как Crystal Reports обрабатывает объекты IBlobFieldObject.Первая проблема, с которой я столкнулся, заключалась в том, что встроенная документация была неправильной для свойств высоты и ширины 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 обрабатывает данные изображения, и, возможно, его нельзя исправить), я был бы полностью готов.

...