• 8串口传图


    串口传图的过程是一次把一个像素值传到SDRAM,并在VGA显示。因此这个像素值的不同就出现了两种串口传图方式:RGB332(一个像素值由一个8bit表示)、RGB565(一个像素值由两个8bit表示,其中第一个8bit是R5G3,第二个8bit是G3B5)。由于生活中大多数的图片是24bit,因此需要用matlab转换成一个个8bit的文本,包括这次工程用到的图片也是24bit的,因此需要转换成8bit。

    串口传图工程示意图:

    第一种传图方式RGB332:

    ①使用matlab将24bit图片生成8bit的像素值:

    %--------------------------------------------------------------------------
    %--           图片数据转换:1个像素转换成1个 8bit hex 数据
    %--------------------------------------------------------------------------
    clear all;
    RGB24 = imread('G:image.jpg');                %读取图片文件
    
    R = bitshift(RGB24(1:end,1:end,1),-5);      %取R高3位,{5'b0,R[7:5]}
    G = bitshift(RGB24(1:end,1:end,2),-5);      %取G高3位,{5'd0,G[7:5]}
    B = bitshift(RGB24(1:end,1:end,3),-6);      %取B高2位,{6'd0,B[7:6]}
    rgb332 = bitshift(R,5) + bitshift(G,2) + B; %拼接{R[7:5],G[7:5],B[7:6]}
    
    fid=fopen('rgb332.txt','w+');               %打开文件
    fprintf(fid,'%02x ',rgb332');               %将字符打印到txt文件中
    View Code

    之后会在自己建的rgb332文本中看到很多8bit的像素值。

    ②由于我的sdram还有vga显示都是16bit的,但是串口接收到的像素值是8bit,因此要把8bit拼接成16bit再给sdram。

    ③然后把程序下载到开发板,并把文本内容复制到串口调试助手中发送。串口速率115200是这里最大了,但是速度还是比较慢。

     ④结果:这种传图方式会导致图片质量不太好。

    第二种传图方式RGB565:

    ①使用matlab将24bit图片生成8bit的像素值:

    %--------------------------------------------------------------------------
    %--           图片数据转换:1个像素转换成2个 8bit hex 数据
    %--------------------------------------------------------------------------
    clear all;
    RGB24 = imread('G:image.jpg');            %读取图片文件
    
    fid = fopen('rgb565.txt','w+');         %打开文件
    [ROW,COL,N] = size(RGB24);              %获得图片尺寸[高度,长度,维度]
    
    for i = 1:ROW
        for j = 1:COL
            RG = bitand(RGB24(i,j,1),248) + bitshift(RGB24(i,j,2),-5); %{R[7:3],3'd0} + {5'd0,G[7:5]}
            G = bitand(RGB24(i,j,2),28);                               %{3'd0,G[4:2],2'd0}
            GB = bitshift( G,3) + bitshift(RGB24(i,j,3),-3);           %{G[4:2],5'd0} + {3'd0,B[7:3]}
            fprintf(fid,'%02x %02x ',RG,GB);%将字符打印到txt文件中
        end
    end
    View Code

    之后会在自己建的rgb565文本中看到很多8bit的像素值。

     ②由于串口每次是把一个像素值发给sdram,这次是RGB565,所以两个8bit才构成一个像素值。因此这次需要把串口得到的两个8bit拼接成一个16bit再发给sdram。

     ③然后把程序下载到开发板,并把文本内容复制到串口调试助手中发送。串口速率115200是这里最大了,但是速度还是比较慢。

     

      ④结果:这种传图方式图片的质量还是很好的。

  • 相关阅读:
    javascript进阶一
    javascript基础
    前端开发工程师——网易云课堂
    win10,软件, 发布者不受信任怎么办
    oracle10g如何配置客户端
    ASPxGridView中DetailRow的使用
    vb中&和+的区别
    nvl
    substr
    ORA-01791: 不是 SELECTed 表达式
  • 原文地址:https://www.cnblogs.com/FPGAer/p/14095550.html
Copyright © 2020-2023  润新知