我将一个bitmap的rgb信息用LockBits方法放到了内存里面,每一个像素的rgb信息一共4个字节,第四个字节没有用。
现在我想将数组中存放的rgb信息转换成 RGB565 格式的,也就是说:R值:取高5位
G值:先取高6位的前3位组成一个字节G值:再取高6位的低3位
B值:取高5位这样就从原来的24位压缩到了16位各位达人,有没有什么好的建议
现在我想将数组中存放的rgb信息转换成 RGB565 格式的,也就是说:R值:取高5位
G值:先取高6位的前3位组成一个字节G值:再取高6位的低3位
B值:取高5位这样就从原来的24位压缩到了16位各位达人,有没有什么好的建议
解决方案 »
- C#winform程序,大数据集的时候,如何优化内存使用
- c# callback 问题(立即给分)
- ****************水晶报表打印问题??????
- Winform Keydress事件 不能响应回车,ctrl , alt ,shift 以及 F1~F12
- 求救一个关于dataGridView相关的一问题那。
- 无发用sandcastle生成chm文件
- NextPage.Click += new EventHandler(NextPage_Click)总是不执行
- 登录页面创建的COOKIE 基类中读不到 大家看看怎么解决
- 在C#中如何做数据导入或合并功能,请做过这方面功能的大侠们留下代码??????
- 请问如何取出字符串中的红色部分
- vs 2005有没有缩放窗口控件?
- 字符串与进制的转换
BitmapData.Stride
BitmapData.Scan0
保存到数组循环移位
{
for (int i = 0; i < bytes; i = i + 4)
{
byte transfer1 = (byte)(Marshal.ReadByte((IntPtr)(Ptr + 2)) & 0xF8 | Marshal.ReadByte((IntPtr)(Ptr + 1)) & 0x07); }
}
先自己写了一点儿,把这个方法放在一个timer里面,但是这明显不行,效率低,整个程序就卡住不动
IntPtr ptr = imageData.Scan0; private void converToRGB565(int Ptr)
{
for (int i = 0; i < bytes; i = i + 4)
{
//FF + R + G + B
uint rgbData = (uint)Marshal.ReadInt64((IntPtr)(Ptr + i)); byte transfer1 = (byte)((rgbData >> 16 & 0xF8) | (rgbData >> 13 & 0x07));
byte transfer2 = (byte)((rgbData >> 5 & 0xE0) | (rgbData >> 3 & 0x1F0));
}
}
这怎么出错了,每次读到bytes大小是37200,每次读到37196的时候就报错