[英]How can I prevent the pasted image from overflowing its boundaries?
我将图像插入Excel范围内,如下所示:
private System.Drawing.Image _logo;
public ProduceUsageRpt(..., System.Drawing.Image logo)
{
. . .
_logo = logo;
}
. . .
var logoRange = _xlSheet.Range[
_xlSheet.Cells[LOGO_FIRST_ROW, _grandTotalsColumn], _xlSheet.Cells[LOGO_LAST_ROW, _grandTotalsColumn]];
Clipboard.SetDataObject(_logo, true);
_xlSheet.Paste(logoRange, _logo);
不幸的是,该图像对于该范围太大(当前为第1行到第4行,第16列)。 它没有做礼貌的事情并按比例缩小以适应规定的范围,而是溢出并超出了它指定的垂直和水平位置。
如何获得按比例缩小的图像并将其限制在其“框”内?
我从这里的一个相关问题改编得到了答案。
只要我使范围足够大,它就可以工作:
. . .
var logoRange = _xlSheet.Range[
_xlSheet.Cells[LOGO_FIRST_ROW, _grandTotalsColumn], _xlSheet.Cells[LOGO_LAST_ROW, _grandTotalsColumn+1]];
PlacePicture(_logo, logoRange);
}
// From Jürgen Tschandl
private void PlacePicture(Image picture, Range destination)
{
Worksheet ws = destination.Worksheet;
Clipboard.SetImage(picture);
ws.Paste(destination, false);
Pictures p = ws.Pictures(System.Reflection.Missing.Value) as Pictures;
Picture pic = p.Item(p.Count) as Picture;
ScalePicture(pic, (double)destination.Width, (double)destination.Height);
}
// Also from Jürgen Tschandl
private void ScalePicture(Picture pic, double width, double height)
{
double fX = width / pic.Width;
double fY = height / pic.Height;
double oldH = pic.Height;
if (fX < fY)
{
pic.Width *= fX;
if (pic.Height == oldH) // no change if aspect ratio is locked
pic.Height *= fX;
pic.Top += (height - pic.Height) / 2;
}
else
{
pic.Width *= fY;
if (pic.Height == oldH) // no change if aspect ratio is locked
pic.Height *= fY;
pic.Left += (width - pic.Width) / 2;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.