来自2D阵列的C#位图

时间:2018-02-26 19:13:33

标签: c# .net bitmap

我正在尝试从2D阵列构建一个位图,只是用于测试。 即使我正确设置矩阵(一个像素黑色,一个白色),当我构建位图时,似乎应用了一些插值滤波器。我怎样才能获得像素值?

bool switchColor = false;
int width = 30;
int height = 15;
int stride = width * 4;
int[,] integers = new int[width, height];

int thres = 0;
for (int i = 0; i < width; ++i)
{
    for (int j = 0; j < height; ++j)
    {                        
        if (switchColor) 
        {
            switchColor = false;
            thres = 0;
        }
        else 
        { 
            switchColor = true;
            thres = 255;
        }
        byte[] bgra = new byte[] { (byte)(thres), (byte)(thres), (byte)(thres), 255 };
        integers[i, j] = BitConverter.ToInt32(bgra, 0);
    }
}

// Copy into bitmap
Bitmap bitmap;
unsafe
{
    fixed (int* intPtr = &integers[0, 0])
    {
        bitmap = new Bitmap(width, height, stride, PixelFormat.Format32bppRgb, new IntPtr(intPtr)); 
        pictureBox1.Image = bitmap;                                         
    }
}

我有:

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为这只是在拉伸模式下放大图片框时的预期行为。您只是创建一个小的30x15位图,我假设它比设计器中的PictureBox小。尝试设置:

pictureBox1.SizeMode = PictureBoxSizeMode.Normal;

然后为了获得更大的测试视图,您可以扩展测试图像:

int width = 300;
int height = 150;