img2num.m

来自「此matlab程序针对320×240的tft液晶显示屏」· M 代码 · 共 51 行

M
51
字号
function img = img2num( fname,pname )
%将一个320*240的图像转换为一个一维数组用于LCD的显示。输出在C:\img.c
%输入必须是一个320*240的图像
switch nargin
case 0
    [fname,pname]=uigetfile('*.jpg;*.bmp');
    if fname==0 
        disp('failed');
        return;
    end
	filename=[pname fname];
case 1
    filename=fname;
case 2
   	filename=[pname fname];
end
img_3d_array=imread(filename);
%将图像文件读入,此时读入的数组是一个三维的8位数组,
%将其按照16位(65536色)LCD的表示方法,将其变为一个一维数组
k=1;
for i=1:320
    for j=1:240
%        if j==150
%           disp('j=150');
%        end
        r=double(img_3d_array(i,j,1));
        g=double(img_3d_array(i,j,2));
        b=double(img_3d_array(i,j,3));
        red=uint16(floor(r/8));   %注意这个地方由于uint8型的数据计算后还是这个类型的数据,将其进行强制类型转换为16位无符号整数。
        green=uint16(floor(g/4));
        blue=uint16(floor(b/8));
        %C=(uint32)red*(2^11)+green*(2^5)+blue;
        img(k)=red*(2^11)+green*(2^5)+blue;
        k=k+1;
    end
end
fname='L:\6.c';
temp=[];
dlmwrite(fname,temp);   %创建一个文件
fp=fopen(fname,'w');
%根据C语言的语法每行5个数共15360行,注意每个数后头加逗号,每5个数加入一个回车。
for i=1:15360
    fprintf(fp, '%6u,', img(5*i-4));
    fprintf(fp, '%6u,', img(5*i-3));
    fprintf(fp, '%6u,', img(5*i-2));
    fprintf(fp, '%6u,', img(5*i-1));
    fprintf(fp, '%6u,\n', img(5*i-0));
end
fclose(fp);
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?