Для каждого изображения мы можем узнать его соотношение сторон: ширина / высота или высота / ширина.Предполагая, что ваша ячейка имеет известную ширину и высоту , вы можете определить, будет ли она слишком узкой или слишком короткой.Кроме того, вы можете рассчитать его новую ширину и высоту с помощью следующих формул:
newWidth = высота ячейки * oldwidth / oldheight
newHeight = ширина полосы * oldheight /oldwidth
CellWidth - NewWidth = 2x PaddingLeft
CellHeight - NewHeight = 2x PaddingTop
Итак, все, что вам нужно сделать, это просто разделить результат на 2 и привести его кinteger.
Я реализовал следующие методы получения для каждого изображения в базе данных (на самом деле я извлекаю эти изображения из базы данных sqlite) в событии SubReportProcessing для своего основного отчета. Я просто добавляю все свои изображения в качестве источника данных.
public class ImageModel
{
public int ImgId { get; set; }
public byte[] Blob { get; set; }
public string PaddingLeft
{
get
{
var img = byteArrayToImage(Blob);
//cell width and height must be specified in points
//(cellwidth - cellheight * image aspect ratio) / 2
var result = (int)((256.0f - 256.0f * ((float)img.Width / (float)img.Height)) / (float)2) + "pt";
return result;
}
}
public string PaddingTop
{
get
{
var img = byteArrayToImage(Blob);
var result = (int)((256.0f - 256.0f * ((float)img.Height / (float)img.Width)) / (float)2) + "pt";
return result;
}
}
После этой операции теперь я могу установить значение отступа в свойствах изображения следующим образом:
=Fields!PaddingLeft.Value
=Fields!PaddingTop.Value
Надеюсь, это поможет!
Cheers;)