demo:用matlab在excel中画图(背景填充颜色)

通过excel单元格背景填色,做成图片的样子。最开始在一个公众号上看到这个做法并给出了些基本函数,就照着码了一下。做过去好久了,链接也找不到了,就先不贴了…上面没有给出详细代码,我自己的做法比较傻逼,肯定有更好的,就码个demo自己看吧。
1.载入图片&设置一下

img=imread('...\camera.jpg');
img=imresize(img,[300,170]);%预处理下吧,因为excel单元格是长方形的,就行多一点,省的拉扁了
% 然后,列数<702吧(A—Z—AA—ZZ)没在往三位数上码。应该有更好的方式而不是分类谈论
% 初始设置一些东西,做过去太久了都忘了啥意思了
Excel=actxserver('Excel.application');
Excel.visible=1;
Workbook=Excel.Workbooks.Add;
Sheets = Excel.ActiveWorkbook.Sheets;
Sheet1 = Sheets.Item(1);
Sheet1.Activate;

2.填色函数
将原始图像中RGB三个通道灰度值,表示为excel中背景色的数值。例如在PS中,天大蓝的色号00(R)51(G)8E(B) ,(如只打FF默认是B,24k纯蓝色);excel中的顺序是8E5100(R最小,G其次,B最大)。matlab里第一个通道R,第二个G,第三个B,所以,第一个的值直接带,第二个256,第三个65536。

 %上面用了300*170
 for (i=1:300);%行数
        for (j=1:170);%列数
            R=img(i,j,1);
            G=img(i,j,2);
            B=img(i,j,3);
            color=double(R)+256*double(G)+65536*double(B);%对应颜色
            lie=lettertoxls(j)%列转换成ABC这样子
            str2=int2str(i);%int to str行数当作字符
            position=strcat(lie,str2)%字符串连接函数,[列,行]。如A1单元格
            Sheet1.Range(pisition).Interior.Color=color;%单元格填色函数
        end
    end

3.由于行是用了A-Z表示,需要十进制转化成A-Z的进制。
这个好像不是26进制吧。26进制的话,0(D)对应A,26(D)对应BA,即Z之后应该是BA而不是AA吧。(也可能是我脑残)
在这里插入图片描述
网上搜了个进制转换我跑着不对(忘了怎么回事了)…先自己将就着码了一个
这个函数只写到了两位A-ZZ。(等看到好方法的再说吧,这样罗列不是办法…)
存储为lettertoxls.mat
写过去好久了,当时也没打注释…有空再标注吧反正能用

function s=lettertoxls(Integer0)
if (mod(Integer0,26)==0);
    if (Integer0==26)
        s='Z'
    elseif(Integer0<676)
        Integer1 = fix((Integer0-26)/26);
        a=letter2char(Integer1);
        b='Z';
        s=strcat(a,b)
    end
%
elseif (Integer0<26)
    a=letter2char(Integer0);
    s=strcat(a)
elseif(Integer0<676)
    Integer1 = fix(Integer0/26);
    Remainder1 = mod(Integer0,26);
    a=letter2char(Integer1);
    b=letter2char(Remainder1);
    s=strcat(a,b)
end

还有个letter2char.mat,数字转ascii码的函数

function str=letter2char(num)
s=num+64;
str=char(s);

总而言之终于是能用了,跑了一遍就丢那里再也没管了。
结果图:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值