我有一个(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; }
2 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
您无需对图像进行降采样,就可以通过这种方式进行。将picturebox属性BackgroundImageLayout设置为zoom或Stretch并将其分配为:
picturebox.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
picturebox.BackgroundImage = bitmap;
System.Windows.Forms.ImageLayout.Zoom将自动将位图调整为图片框的大小。
- 2 回答
- 0 关注
- 178 浏览
添加回答
举报
0/150
提交
取消