先获取微软图标四种颜色的RGB值,然后就用matlab生产JPEG图片的方法进进行编码。
代码如下(matlab语言):
% JPEG文件
%
%用16*16的最小编码单元进行绘图,
%
clear all;
clear;
for i=1:1:16
for j=1:1:16
if ((i<=8)&(j<=8))
R(i,j)=242;
elseif ((i<=8)&(j>8))
R(i,j)=127;
elseif((i>8)&(j<=8))
R(i,j)=1;
else
R(i,j)=255;
end
end
end
for i=1:1:16
for j=1:1:16
if ((i<=8)&(j<=8))
G(i,j)=79;
elseif ((i<=8)&(j>8))
G(i,j)=187;
elseif((i>8)&(j<=8))
G(i,j)=164;
else
G(i,j)=186;
end
end
end
for i=1:1:16
for j=1:1:16
if ((i<=8)&(j<=8))
B(i,j)=33;
elseif ((i<=8)&(j>8))
B(i,j)=2;
elseif((i>8)&(j<=8))
B(i,j)=241;
else
B(i,j)=1;
end
end
end
R
G
B
I(:,:,1)=R;
I(:,:,2)=G;
I(:,:,3)=B;
I=uint8(I);
figure,imshow(I);
Y = floor(0.299*double(R) + 0.587*double(G) + 0.114*double(B))-128;
Cb =floor(-0.1687*double(R) - 0.3313*double(G) + 0.5*double(B));
Cr =floor(0.5*double(R) - 0.4187*double(G) - 0.0813*double(B)) ;
Y
Cb
Cr
Y1=Y(1:8,1:8)
Y2=Y(1:8,9:16)
Y3=Y(9:16,1:8)
Y4=Y(9:16,9:16)
for i=1:1:8
for j=1:1:8
Cb1(i,j)=Cb(2*i-1,2*j-1);
Cr1(i,j)=Cr(2*i-1,2*j-1);
end
end
Cb1
Cr1
% 量化表
qty=[8 6 5 8 12 20 26 31;
6 6 7 10 13 29 30 28;
7 7 8 12 20 29 35 28;
7 9 11 15 26 44 40 31;
9 11 19 28 34 55 52 39;
12 18 28 32 41 52 57 46;
25 32 39 44 52 61 60 51;
36 46 48 49 56 50 52 50];
qtc=[9 9 12 24 50 50 50 50;
9 11 13 33 50 50 50 50;
12 13 28 50 50 50 50 50;
24 33 50 50 50 50 50 50;
50 50 50 50 50 50 50 50;
50 50 50 50 50 50 50 50;
50 50 50 50 50 50 50 50;
50 50 50 50 50 50 50 50];
%DCT
dct_y1=round(dct2(Y1))
dct_y2=round(dct2(Y2))
dct_y3=round(dct2(Y3))
dct_y4=round(dct2(Y4))
dct_cb1=round(dct2(Cb1))
dct_cr1=round(dct2(Cr1))
% 量化系数
qt_y1=round(dct_y1./qty)
qt_y2=round(dct_y2./qty)
qt_y3=round(dct_y3./qty)
qt_y4=round(dct_y4./qty)
qt_cb1=round(dct_cb1./qtc)
qt_cr1=round(dct_cr1./qtc)
效果图: