当前位置: 首页 > article >正文

RGB565转BITMAP[C#---2]

这是楼主在开发C#上位机的时候遇到的另一个问题,怎么把RGB565转为BITMAP,在CSDN上搜索,要么是安卓平台的,要么是2011年的古早代码(还没排版),还是靠自己和DEEPSEEK的智慧解决了(●’◡’●) 当然,凭良心说话,楼主主要负责DEBUG和调试。为了让大家少走弯路,所以也就贴出啦。

上位机也在锐意开发中啊!实现的功能是ESP和PC使用WLAN图传。有这方面需求的小伙伴可以关注一下我的项目
这是GITCODE项目地址
这个项目我这个寒假会一直做下去丰富更多的功能,包括WLAN 收发什么的
GITHUB?仓库建好了,但是不知道为啥传不上去(;′⌒`)

如果这对你有帮助,还请点点STAR,点点赞,点点关注,这对我真的很重要,谢谢ヾ(•ω•`)o

        public static Bitmap ConvertRgb565ToBitmap(byte[] imageData, int width, int height)
        {
            // 创建一个新的Bitmap对象
            Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb);

            // 锁定Bitmap的像素数据
            BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);

            // 获取指向Bitmap像素数据的指针
            IntPtr ptr = bitmapData.Scan0;

            // 分配内存来存储转换后的像素数据
            int bytes = Math.Abs(bitmapData.Stride) * height;
            byte[] rgbValues = new byte[bytes];

            // 遍历每个像素并转换RGB565到RGB888
            for (int y = 0; y < height; y++)
            {
                for (int x = 0; x < width; x++)
                {
                    int index = (y * width + x) * 2;
                    ushort rgb565 = BitConverter.ToUInt16(imageData, index);

                    // 提取RGB565的红色、绿色和蓝色分量
                    byte red = (byte)((rgb565 >> 11) & 0x1F);
                    byte green = (byte)((rgb565 >> 5) & 0x3F);
                    byte blue = (byte)(rgb565 & 0x1F);

                    // 将5位和6位分量扩展为8位
                    red = (byte)((red * 255) / 31);
                    green = (byte)((green * 255) / 63);
                    blue = (byte)((blue * 255) / 31);

                    // 计算ARGB值
                    int argb = 255 << 24 | red << 16 | green << 8 | blue;

                    // 计算在rgbValues中的索引
                    int pos = (y * bitmapData.Stride) + (x * 4);
                    rgbValues[pos] = (byte)blue;
                    rgbValues[pos + 1] = (byte)green;
                    rgbValues[pos + 2] = (byte)red;
                    rgbValues[pos + 3] = 255; // Alpha通道
                }
            }

            // 将转换后的像素数据复制回Bitmap
            Marshal.Copy(rgbValues, 0, ptr, bytes);

            // 解锁Bitmap的像素数据
            bitmap.UnlockBits(bitmapData);

            return bitmap;
        }

最后贴一张楼主的开发进度
在这里插入图片描述


http://www.kler.cn/a/533161.html

相关文章:

  • DeepSeek 使用及本地安装教程
  • 【ArcGIS_Python】使用arcpy脚本将shape数据转换为三维白膜数据
  • Deepseek:网页版OR本地部署版本?
  • DeepSeek-R1:通过强化学习激励大型语言模型(LLMs)的推理能力
  • 玉米苗和杂草识别分割数据集labelme格式1997张3类别
  • 优化代码性能:利用CPU缓存原理
  • Vim的基础命令
  • Go语言中结构体字面量
  • 2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题2)-网络部分解析-附详细代码
  • 【人工智能】掌握图像风格迁移:使用Python实现艺术风格的自动化迁移
  • ChatGPT提问技巧:行业热门应用提示词案例--咨询法律知识
  • git进阶--5---git reset 和 git revert 的区别与联系
  • TypeScript 学习指南
  • 【Python深入浅出】解锁Python3模块:从入门到实战的进阶指南
  • OSPF基础(2)
  • python venv 虚拟环境安装以及使用
  • Linux 系统上安装 Docker 方法详解与比较
  • C++ 类与对象(中)
  • oracle: 索引失效的情况
  • python-异常处理笔记
  • pwn环境搭建手册(步骤清晰且附带详细命令)
  • Leetcode::922. 按奇偶排序数组 II
  • 基于Python实现机器视觉与深度学习相结合的项目
  • 数据结构(AVL树、B-Tree、B+Tree)
  • uniCloud(dcloud.net.cn)https证书配制
  • 性能优化中的数据过滤优化