我找过一些网上的答案,它都没有讲怎么样转成数组。
我要的那种数组是以ARGB每个颜色分量的数组
比如100×100的32位图片
转换成四个数组
byte A[10000]
byte R[10000]
byte G[10000]
byte B[10000]
C#中怎么把Image转成数组?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答 默认 最新
笑面虎 2024-05-10 12:09关注以下内容由CHATGPT及笑面虎共同生成、有用望采纳:
【您想要解决的问题】:您想要解决的问题是如何在C#中将一个Image对象转换成四个数组,每个数组分别包含图片中每个像素的Alpha(A)、Red(R)、Green(G)、Blue(B)颜色分量。
【问题出现原因】:这个问题出现的原因是您需要对图片的每个颜色分量进行单独的操作或分析,而直接使用Image对象不方便进行这样的操作。通过将颜色分量分解到不同的数组中,您可以更容易地对每个分量进行处理。
【问题解决方案】:为了解决这个问题,您可以使用C#中的Bitmap类来锁定图片的像素数据,然后遍历这些像素,将每个颜色分量提取到对应的数组中。
【提供代码】:
using System; using System.Drawing; using System.Drawing.Imaging; public class ImageToArray { public static void Main() { // 加载图片 Bitmap bitmap = new Bitmap("path_to_your_image.png"); // 创建数组 byte[] A = new byte[bitmap.Width * bitmap.Height]; byte[] R = new byte[bitmap.Width * bitmap.Height]; byte[] G = new byte[bitmap.Width * bitmap.Height]; byte[] B = new byte[bitmap.Width * bitmap.Height]; // 锁定位图的像素数据 BitmapData bitmapData = bitmap.LockBits( new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); IntPtr ptr = bitmapData.Scan0; int bytes = Math.Abs(bitmapData.Stride) * bitmap.Height; byte[] rgbValues = new byte[bytes]; // 从位图中复制像素数据到数组 System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes); // 解锁像素数据 bitmap.UnlockBits(bitmapData); // 遍历像素数据并分离颜色分量 for (int i = 0; i < rgbValues.Length; i += 4) { A[i / 4] = rgbValues[i]; R[i / 4] = rgbValues[i + 1]; G[i / 4] = rgbValues[i + 2]; B[i / 4] = rgbValues[i + 3]; } // 这里可以添加代码来使用这些数组 } }【代码运行方式】:您需要将上述代码复制到一个C#项目中,确保您有一个名为"path_to_your_image.png"的图片文件在您的项目中,或者更新路径以指向您的图片文件。然后,您可以编译并运行程序。
【代码预期运行结果】:代码将创建四个数组,每个数组包含图片中相应颜色分量的所有值。您可以通过添加额外的代码来检查数组的内容,例如打印数组的前几个元素。
【推荐相关链接】:
解决 无用评论 打赏 举报 编辑记录