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是这里最大了,但是速度还是比较慢。

 

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

原文地址:https://www.cnblogs.com/FPGAer/p/14095550.html