Как программно изменить сжатие изображения в C#? - PullRequest
0 голосов
/ 04 мая 2020

Как это сделать программно в C#? Я использую MS Office профессиональный 2016

enter image description here.

Чтобы вставить изображение, я использую этот код:

        DialogResult result;
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Title = "Choose image file";
        result = ofd.ShowDialog();

        if (result == DialogResult.OK)
        {
            //GetInstance().ActiveSheet.Shapes.AddPicture(ofd.FileName, MsoTriState.msoFalse, MsoTriState.msoCTrue, 10, 10, -1, -1);
            GetInstance().ActiveSheet.Shapes.AddPicture2(ofd.FileName, MsoTriState.msoFalse, MsoTriState.msoCTrue, 10, 10, -1, -1, 1);
            Excel.Shape newShape = GetInstance().ActiveSheet.Shapes.Item(GetInstance().ActiveSheet.Shapes.Count);
            newShape.ZOrder(MsoZOrderCmd.msoSendToBack);
            newShape.Placement = Excel.XlPlacement.xlMoveAndSize;
        }

Тогда у меня есть изображения в виде фигур. Может быть, есть способ сделать сжатие изображения на фигурах?

1 Ответ

0 голосов
/ 04 мая 2020

Есть несколько способов выполнить работу:

  1. введите описание ссылки здесь предоставляет последний аргумент compress, который позволяет указать, должна ли картинка сжаться при вставке. Можно использовать следующие значения:

    • msoPictureCompressDocDefault - изображение сжато или не зависит от настроек документа.
    • msoPictureCompressFalse - изображение не сжато.
    • msoPictureCompressTrue - изображение будет сжато.
  2. Вы можете использовать. net BCL-классы, чтобы уменьшить размер изображения перед его добавлением в Документы Excel:

/// <summary>
/// Resize the image to the specified width and height.
/// </summary>
/// <param name="image">The image to resize.</param>
/// <param name="width">The width to resize to.</param>
/// <param name="height">The height to resize to.</param>
/// <returns>The resized image.</returns>
public static Bitmap ResizeImage(Image image, int width, int height)
{
    var destRect = new Rectangle(0, 0, width, height);
    var destImage = new Bitmap(width, height);

    destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

    using (var graphics = Graphics.FromImage(destImage))
    {
        graphics.CompositingMode = CompositingMode.SourceCopy;
        graphics.CompositingQuality = CompositingQuality.HighQuality;
        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        graphics.SmoothingMode = SmoothingMode.HighQuality;
        graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

        using (var wrapMode = new ImageAttributes())
        {
            wrapMode.SetWrapMode(WrapMode.TileFlipXY);
            graphics.DrawImage(image, destRect, 0, 0, image.Width,image.Height, GraphicsUnit.Pixel, wrapMode);
        }
    }

    return destImage;
}

Вы можете найти больше способов и информации:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...