Как установить ContextMenuStrip режим сглаживания изображения? - PullRequest
0 голосов
/ 08 марта 2019

Хотелось бы, чтобы изображения были лучшего качества ToolStripMenuItem с, чтобы они не выглядели точечно.

Исходный код 1

private void button2_Click(object sender, EventArgs e)
{
    ContextMenuStrip cms = new ContextMenuStrip();
    cms.Items.Add("Test", Properties.Resources.path1092);
    cms.Show(button2, Cursor.Position);
}

Скриншот

context menu screenshot

Файл изображения

original image

Исходный код 2

Здесь я использую этот метод:

internal static Bitmap ResizeToFitBoundingBox(Image image, in Rectangle box)
{
    float maxHeight = box.Width;
    float maxWidth = box.Height;

    float x = Math.Min(maxWidth / image.Width,
        maxHeight / image.Height);

    float newW = (float)image.Width * x;
    float newH = (float)image.Height * x;

    var bmp = new Bitmap((int)Math.Round(maxWidth),
        (int)Math.Round(maxHeight));
    bmp.MakeTransparent(Color.Empty);
    using (Graphics gr = Graphics.FromImage(bmp))
    {
        gr.DrawImage(image, (bmp.Width - newW) / 2,
            (bmp.Height - newH) / 2, newW, newH);
    }

    return bmp;
}

Первый метод выглядит так:

private void button2_Click(object sender, EventArgs e)
{
    ContextMenuStrip cms = new ContextMenuStrip();

    ToolStripMenuItem item = new ToolStripMenuItem("Test");

    cms.Items.Add(item);

    cms.ImageList = new ImageList();
    cms.ImageList.ColorDepth = ColorDepth.Depth32Bit;
    cms.ImageList.TransparentColor = Color.Empty;
    cms.ImageList.ImageSize = new Size(128, 128);
    cms.ImageList.Images.Add(ResizeToFitBoundingBox(Properties.Resources.path1092,
        new Rectangle(Point.Empty, new Size(128, 128))));

    item.ImageTransparentColor = Color.Empty;
    item.ImageIndex = 0;
    item.ImageTransparentColor = Color.Empty;

    cms.Show(button2, Cursor.Position);
}

Скриншот 2

Сохраняется соотношение сторон:

aspect ratio kept

Проблема та же.

...