连续穿越 2024-05-10 12:09 采纳率: 42.9%
浏览 17

C#中怎么把Image转成数组?

我找过一些网上的答案,它都没有讲怎么样转成数组。
我要的那种数组是以ARGB每个颜色分量的数组
比如100×100的32位图片
转换成四个数组
byte A[10000]
byte R[10000]
byte G[10000]
byte B[10000]

  • 写回答

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"的图片文件在您的项目中,或者更新路径以指向您的图片文件。然后,您可以编译并运行程序。

    【代码预期运行结果】:代码将创建四个数组,每个数组包含图片中相应颜色分量的所有值。您可以通过添加额外的代码来检查数组的内容,例如打印数组的前几个元素。

    【推荐相关链接】:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月10日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上