这是楼主在开发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;}
最后贴一张楼主的开发进度