Matlab:ReadPrt2.0版本

上一个版本没有考虑行height对读取数据的因素,所以只会重复读第一行prt的数据!!


代码:

clc

clear

%%读取prt的txt数据:a为两个十六进制数x1,x2为紧紧挨在的组合x1x2
%头文件的分布是
%a(1)a(2)a(3)a(4)
%a(5)a(6)a(7)a(8)
%……
%a(45)a(46)a(47)a(48)
%但是实际的存储顺序是倒叙的
%a(4)a(3)a(2)a(1)
%a(8)a(7)a(6)a(5)
%……
%a(48)a(47)a(46)a(45)
tic
% a=textread('0630selun.txt','%s');
a=textread('0630.txt','%s');
toc
%提高下面代码的运行效率,将十六进制a转换成十进制数b
tic
b=hex2dec(a);
toc
%%
%函数的使用说明
%bitshift(x,n):将十进制数x向左移位n次,n为负的时候向右移位
%十六进制转换成十进制:hex2dec()
%十进制转换成二进制:dec2bin()
%获取十进制数x的从右到左的第n位:bitget(x,n)   bitget(5,4:-1:1)=0101
%%
% xdpi=bitshift(hex2dec(a(6)),8)+hex2dec(a(5))
% ydpi=bitshift(hex2dec(a(10)),8)+hex2dec(a(9))
% BPL=bitshift(hex2dec(a(14)),8)+hex2dec(a(13))
% height=bitshift(hex2dec(a(18)),8)+hex2dec(a(17))
% width=bitshift(hex2dec(a(22)),8)+hex2dec(a(21))
% colors=hex2dec(a(29))
% BPC=hex2dec(a(33))


xdpi=bitshift(b(6),8)+b(5);
ydpi=bitshift(b(10),8)+b(9);
BPL=bitshift(b(14),8)+b(13);
height=bitshift(b(18),8)+b(17);
width=bitshift(b(22),8)+b(21);
colors=b(29);
BPC=b(33);


%初始化分色片(原图)的大小
KK=ones(height,BPL*4);%用来生成分色片
CC=ones(height,BPL*4);
MM=ones(height,BPL*4);
YY=ones(height,BPL*4);
WW=ones(height,BPL*4);
GG=ones(height,BPL*4);


F(1,:,:)=KK;F(2,:,:)=CC;F(3,:,:)=MM;
F(4,:,:)=YY;F(5,:,:)=WW;F(6,:,:)=GG;


%原图是二值分色片0-1,对应Prt的四值00-11
%认为0对应的是00,1对应的是11
% K=logical(K);
tic
for i=1:height
    for j=1:BPL
        %一个a(j)存放两个十六进制数,每2位对应分色片的1位,所以对应分色片4位
        for n=4:-1:1
            %数据从a(50)开始存放
%              K(i,4*(j-1)+n)=bitget(hex2dec(a(j+48)),2*n-1);
%              C(i,4*(j-1)+n)=bitget(hex2dec(a(j+48+BPL)),2*n-1);
%              M(i,4*(j-1)+n)=bitget(hex2dec(a(j+48+BPL*2)),2*n-1);
%              Y(i,4*(j-1)+n)=bitget(hex2dec(a(j+48+BPL*3)),2*n-1);
%              W(i,4*(j-1)+n)=bitget(hex2dec(a(j+48+BPL*4)),2*n-1);
%              G(i,4*(j-1)+n)=bitget(hex2dec(a(j+48+BPL*5)),2*n-1);
               if (bitget(b(48+j+6*(i-1)*BPL),2*n-1)==1)
                         F(1,i,4*(j-1)+n)=0;
               end
               if (bitget(b(48+j+ 6*(i-1)*BPL+BPL),2*n-1)==1)
                         F(2,i,4*(j-1)+n)=0;
               end
               if (bitget(b(48+j+ 6*(i-1)*BPL+BPL*2),2*n-1)==1)
                         F(3,i,4*(j-1)+n)=0;
               end
               if (bitget(b(48+j+ 6*(i-1)*BPL+BPL*3),2*n-1)==1)
                         F(4,i,4*(j-1)+n)=0;
               end
               if (bitget(b(48+j+ 6*(i-1)*BPL+BPL*4),2*n-1)==1)
                         F(5,i,4*(j-1)+n)=0;
               end
               if (bitget(b(48+j+ 6*(i-1)*BPL+BPL*5),2*n-1)==1)
                         F(6,i,4*(j-1)+n)=0;
               end
%              K(i,4*(j-1)+n)=bitget(b(j+48),2*n-1);
%              C(i,4*(j-1)+n)=bitget(b(j+48+BPL),2*n-1);
%              M(i,4*(j-1)+n)=bitget(b(j+48+BPL*2),2*n-1);
%              Y(i,4*(j-1)+n)=bitget(b(j+48+BPL*3),2*n-1);
%              W(i,4*(j-1)+n)=bitget(b(j+48+BPL*4),2*n-1);
%              G(i,4*(j-1)+n)=bitget(b(j+48+BPL*5),2*n-1);
        end
    end
end
toc


tic
F=logical(F);%为了变二值,改bitdepth为1


imwrite(reshape(F(1,:,:),height,BPL*4),'1K.tif','Compression','none');%不压缩
imwrite(reshape(F(2,:,:),height,BPL*4),'2C.tif','Compression','none');
imwrite(reshape(F(3,:,:),height,BPL*4),'3M.tif','Compression','none');
imwrite(reshape(F(4,:,:),height,BPL*4),'4Y.tif','Compression','none');
imwrite(reshape(F(5,:,:),height,BPL*4),'5W.tif','Compression','none');
imwrite(reshape(F(6,:,:),height,BPL*4),'6G.tif','Compression','none');




toc

猜你喜欢

转载自blog.csdn.net/teddygogogo/article/details/80867002
今日推荐