【问题标题】:Custom bitmap object isn't displaying correctly in PictureBox自定义位图对象在 PictureBox 中未正确显示
【发布时间】:2020-11-04 02:21:49
【问题描述】:

我正在尝试通过代码以非常小的尺寸生成自定义位图并将其显示到PictureBox,放大以适应PictureBox。我正在使用图形对象来执行此操作,以便使用 NearestNeighbor 插值 完美地放大单个像素。

我正在使用位于Form.Load 上的PictureBoxs“图像”组件中的临时默认图像的图形对象,它的大小设置为完美的宽度和高度,以保持正确的纵横比原始位图。

以下是相关代码:

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 似乎绘制不正确。当通过PictureBox 显示时,原始Bitmap 的大约半个像素在位图的左侧和顶部边缘被切断,大约半个像素显示为右侧和底部边缘的原始默认图像。这几乎就像Bitmap 在被图形对象绘制时被向上和向左偏移,它并没有像预期的那样完美地覆盖原始默认图像。

我的第一个想法是PictureBoxs SizeMode,它仍然设置为“正常”,但它们都没有改变问题。 Here 是问题的图片。右侧和底部的黑色边缘是临时默认图像(我使用的图形来自的图像)的一部分,它是完全黑色的,覆盖了整个PictureBox 区域。

谁能提供一些见解?

【问题讨论】:

  • 设置[Graphics].PixelOffsetMode = PixelOffsetMode.Half。阅读笔记here

标签: c# winforms bitmap picturebox


【解决方案1】:

正如用户 Jimi 在评论中指出的那样,来自this 帖子的grp.PixelOffsetMode = PixelOffsetMode.Half 解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多