Пользовательский объект растрового изображения неправильно отображается в PictureBox - PullRequest
0 голосов
/ 14 июля 2020
• 1000 Я использую графический объект для этого, чтобы использовать интерполяцию NearestNeighbor для точного повышения масштаба отдельных пикселей.

Я использую графический объект временного изображения по умолчанию, которое находится в PictureBox s Компонент «Изображение» на Form.Load, размер которого идеален по ширине и высоте для сохранения правильного соотношения сторон исходного растрового изображения.

Вот соответствующий код:

private void Form1_Load(object sender, EventArgs e)
{
    bmp = new Bitmap(16, 9, PixelFormat.Format24bppRgb);
    rnd = new Random();

    GenerateImage();
}

private void GenerateImage()
{
    for (int x = 0; x < bmp.Width; x++)
    {
        for (int y = 0; y < bmp.Height; y++)
        {
            int num = rnd.Next(2);
            if (num == 0)
            {
                bmp.SetPixel(x, y, Color.White);
            }
            else
            {
                bmp.SetPixel(x, y, Color.Gold);
            }
        }
    }

    Bitmap image = new Bitmap(picOutput.Image);
    grp = Graphics.FromImage(image);

    grp.InterpolationMode = InterpolationMode.NearestNeighbor;

    grp.DrawImage(
        bmp,
        new Rectangle(0, 0, image.Width, image.Height),
        0,
        0,
        bmp.Width,
        bmp.Height,
        GraphicsUnit.Pixel
    );

    grp.Dispose();
    picOutput.Image = image;
}

Проблема в том, что Bitmap кажется нарисованным неправильно. Около половины пикселя от исходного Bitmap обрезается на левом и верхнем краях растрового изображения при отображении через PictureBox, и эта примерно половина пикселя отображается как исходное изображение по умолчанию на правом и нижнем краях. Это почти как если бы Bitmap был смещен вверх и влево при рисовании графическим объектом, он не полностью закрывает исходное изображение по умолчанию, как предполагалось.

Моей первой мыслью было PictureBox s SizeMode, который по-прежнему установлен на «Нормальный», но ни один из них не решает проблему. Здесь - изображение проблемы. Черные края справа и внизу являются частью временного изображения по умолчанию (изображение, из которого я использовал графику), которое полностью черное и покрывает всю область PictureBox.

Может ли кто-нибудь дать некоторое представление?

1 Ответ

0 голосов
/ 14 июля 2020

Как указал пользователь Джими в комментарии, grp.PixelOffsetMode = PixelOffsetMode.Half из этот пост решил проблему.

...