簡體   English   中英

如何防止粘貼的圖像溢出其邊界?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM