C#RGB [,]到图片框

我有一个(2448 * 2048)5Mpixel图像数据的数据,但该图片框只有(816 * 683)约500,000像素,因此我降低了像素,只需要一个黑白图像,所以我使用了G值创建图像,但是我输出的图像如下图所示。我的错误是哪一部分?


 public int[,] lowered(int[,] greenar)

    {

        int[,] Sy = new int[816, 683];

        int x = 0;

        int y = 0;

        for (int i = 1; i < 2448; i += 3)

        {

            for (int j = 1; j < 2048; j += 3)

            {

                Sy[x, y] = greenar[i, j];

                y++;

            }

            y = 0;

            x++;

        }

        return Sy;

    }



static Bitmap Create(int[,] R, int[,] G, int[,] B)

    {

        int iWidth = G.GetLength(1);

        int iHeight = G.GetLength(0);

        Bitmap Result = new Bitmap(iWidth, iHeight,

        System.Drawing.Imaging.PixelFormat.Format24bppRgb);

        Rectangle rect = new Rectangle(0, 0, iWidth, iHeight);

        System.Drawing.Imaging.BitmapData bmpData = Result.LockBits(rect,

        System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

        IntPtr iPtr = bmpData.Scan0;

        int iStride = bmpData.Stride;

        int iBytes = iWidth * iHeight * 3;

        byte[] PixelValues = new byte[iBytes];

        int iPoint = 0;

        for (int i = 0; i < iHeight; i++)

        {

            for (int j = 0; j < iWidth; j++)

            {

                int iG = G[i, j];

                int iB = G[i, j];

                int iR = G[i, j];

                PixelValues[iPoint] = Convert.ToByte(iB);

                PixelValues[iPoint + 1] = Convert.ToByte(iG);

                PixelValues[iPoint + 2] = Convert.ToByte(iR);

                iPoint += 3;

            }

        }

        System.Runtime.InteropServices.Marshal.Copy(PixelValues, 0, iPtr, iBytes);

        Result.UnlockBits(bmpData);

        return Result;


    }

http://img.mukewang.com/60a0cfce0001b1c905530623.jpg

紫衣仙女
浏览 179回答 2
2回答

慕运维8079593

您无需对图像进行降采样,就可以通过这种方式进行。将picturebox属性BackgroundImageLayout设置为zoom或Stretch并将其分配为:picturebox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;picturebox.BackgroundImage = bitmap;System.Windows.Forms.ImageLayout.Zoom将自动将位图调整为图片框的大小。
打开App,查看更多内容
随时随地看视频慕课网APP