RGB565转BITMAP[C#---2]

embedded/2025/2/6 17:17:01/

这是楼主在开发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到RGB888for (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通道}}// 将转换后的像素数据复制回BitmapMarshal.Copy(rgbValues, 0, ptr, bytes);// 解锁Bitmap的像素数据bitmap.UnlockBits(bitmapData);return bitmap;}

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


http://www.ppmy.cn/embedded/160087.html

相关文章

【PyQt】keyPressEvent键盘按压事件无响应

问题描述 通过load ui 文件加载程序时&#xff0c;keyPressEvent键盘按压事件无响应 原因 主要是由于事件处理的方式和窗口的显示方式不正确所导致的。 解决代码 self&#xff1a;这里的self作为loadUi函数的第二个参数&#xff0c;意味着加载的界面将被设置为当前类实例&…

基于YOLO11的肺结节检测系统

基于YOLO11的肺结节检测系统 (价格90) LUNA16数据集 数据一共 1186张 按照8&#xff1a;1&#xff1a;1随机划分训练集&#xff08;948张&#xff09;、验证集&#xff08;118张&#xff09;与测试集&#xff08;120张&#xff09; 包含 nodule 肺结节 1种…

『 C++ 』中理解回调类型在 C++ 中的使用方式。

文章目录 案例 1&#xff1a;图形绘制库中的回调使用场景说明代码实现代码解释 案例 2&#xff1a;网络服务器中的连接和消息处理回调场景说明代码实现代码解释 案例 3&#xff1a;定时器中的回调使用场景说明代码实现代码解释 以下将通过不同场景给出几个使用回调类型的具体案…

Python之如何在Visual Studio Code 中写的python程序打包成可以在Windows系统下运行的.exe程序

要将你在 Visual Studio Code 中编写的 Python 程序打包成可以在 Windows 系统下运行的 .exe 文件&#xff0c;可以使用 PyInstaller 工具。以下是详细的操作步骤&#xff1a; 1. 安装 PyInstaller 首先&#xff0c;你需要安装 PyInstaller。打开终端&#xff08;可以在 VS C…

GPU 硬件原理架构(一)

这张费米管线架构图能看懂了&#xff0c;整个GPU的架构基本就熟了。市面上有很多GPU厂家&#xff0c;他们产品的架构各不相同&#xff0c;但是核心往往差不多&#xff0c;整明白一了个基本上就可以触类旁通了。下面这张图信息量很大&#xff0c;可以结合博客GPU 英伟达GPU架构回…

《手札·开源篇》从开源到商业化:中小企业的低成本数字化转型路径——一位甲方信息化负责人与开源开发者的八年双重视角

在中小企业数字化转型的浪潮中&#xff0c;"低成本"与"可持续性"始终是悬在决策者头顶的双刃剑。作为曾操盘过30信息化项目、主导过开源ERP二次开发的信息化老兵&#xff0c;我试图通过"甲方信息化负责人"与"开源开发者"的双重身份&am…

电控三周速成计划参考

第1周&#xff1a;基础搭建与GPIO控制 学习目标&#xff1a;建立开发环境&#xff0c;掌握最基础的硬件控制能力 每日学习&#xff08;2-3小时&#xff09;&#xff1a; 环境搭建&#xff08;2天&#xff09; 安装Keil MDK-ARM STM32CubeMX使用CubeMX创建第一个工程&#xf…

【Qt】常用的容器

Qt提供了多个基于模板的容器类&#xff0c;这些容器类可用于存储指定类型的数据项。例如常用的字符串列表类 QStringList 可用来操作一个 QList<QString>列表。 Qt的容器类比标准模板库(standard template library&#xff0c;STL)中的容器类更轻巧、使用更安全且更易于使…