打印

OV7725串口显示图片

[复制链接]
486|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
第三章|  楼主 | 2020-4-13 09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在做将OV7725的像素数据传输到上位机进行显示的时候,遇到了问题,希望得到大家的指导,下面开始讲述我遇到的问题
1 摄像头的像素格式为RGB565,所以一个像素为16位,我将一个像素数据分为高8位和低8位发送给上位机,下面是代码[C] 纯文本查看 复制代码void ImagDisp(uint16_t sx,uint16_t sy,uint16_t width,uint16_t height)
{
        uint16_t i, j;
        uint16_t Camera_Data;
        uint8_t Data_H, Data_L;
       
        ILI9341_OpenWindow(sx,sy,width,height);
        ILI9341_Write_Cmd ( CMD_SetPixel );       
        printf("FF11FF11FF11");
        for(i = 0; i < width; i++)
        {
                for(j = 0; j < height; j++)
                {
                        READ_FIFO_PIXEL(Camera_Data);                /* 从FIFO读出一个rgb565像素到Camera_Data变量 */
                        ILI9341_Write_Data(Camera_Data);
                        Data_L = (Camera_Data & 0xFF);
                        Data_H = ((Camera_Data >> 8) & 0xFF);
                        printf("%x", Data_H);
                        printf("%x", Data_L);
                }
        }
        printf("EE22EE22EE22");
        while(1);
}

2 然后是上位机处理数据的代码
[C] 纯文本查看 复制代码public Bitmap GetDataPicture(int w, int h,byte[] data)
        {
            //定义一个BMP格式的图片
            Bitmap pic = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format16bppRgb565);
            //定义一个像素颜色变量
            Color c;
            //定义RGB565转变为RGB888的字节数组
            byte[] rgb24 = new byte[3];
            //这是像素位置变量
            ushort j = 0;
            for (int i = 0; i < data.Length; i+=2)
            {
                //将高低8位合并为半字
                ushort RGB565_Temp = (ushort)data;
                RGB565_Temp = (ushort)((RGB565_Temp << 8) | data[i + 1]);
                //进行转换
                rgb565_2_rgb24(ref rgb24, RGB565_Temp);
                //设置像素
                c = Color.FromArgb(rgb24[2], rgb24[1], rgb24[0]);
                //将像素写进图片
                pic.SetPixel(j % w, j / w, c);
                j++;
            }

            return pic;
        }

其中 rgb565_2_rgb24(ref rgb24, RGB565_Temp);代码为
[C] 纯文本查看 复制代码private static void rgb565_2_rgb24(ref byte[] rgb24, ushort rgb565)
        {
            //uint data;
            //extract RGB   
            rgb24[2] = (byte)((rgb565 & RGB565_MASK_RED) >> 11);
            rgb24[1] = (byte)((rgb565 & RGB565_MASK_GREEN) >> 5);
            rgb24[0] = (byte)((rgb565 & RGB565_MASK_BLUE));

            //amplify the image   
            rgb24[2] <<= 3;
            rgb24[1] <<= 2;
            rgb24[0] <<= 3;

            //data = (uint)(rgb24[2] << 16 + rgb24[1] << 8 + rgb24[0]);
            //return data;
        }



不知道哪里出了问题,请大家帮忙看看。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

380

主题

380

帖子

0

粉丝