diameter 发表于 2011-7-25 10:01:47

[9860SDK]图片压缩第一弹

本帖最后由 diameter 于 2011-7-25 13:31 编辑

代码生成器在5L
9860的默认图片结构是单色位图,绘图时只有OVER、OR、AND、XOR四种合成方式,Norm,Rev,Mesh三种处理方式。对于下图所示的效果,默认的图片格式可能很难做到

对于上图所示效果,其实只需要加一种颜色(或曰标志)去色就可以做到。
曾经我使用一个byte作为一个标志,很浪费内存,
一共三种颜色(标志位)那每一位需要的bit为
所以不如将再加一种不用的颜色凑足四位,更易计算
测试效果

wssdz008 发表于 2011-7-25 12:02:51

晕了……

月与映之皮丘 发表于 2011-7-25 12:18:26

看不懂…

diameter 发表于 2011-7-25 13:23:59

回ls两位,我的意思就是把一个byte作为4pixel
可以做到下图的测试效果

diameter 发表于 2011-7-25 13:30:53

代码生成器

diameter 发表于 2011-7-25 13:32:47

绘图函数

void draw_image_4 (int x,int y,int width,int height,unsigned char *pimage)
{
    int i,j,k,pixel;
    unsigned char p;
    int iwidth = width/4 + (width & 1 ? 1:0);
    for (i=0;i<height;++i,pimage+=iwidth){
      for (j=0;j<iwidth;++j){
            p = pimage;
            for (k=0;k<4;++k){
                pixel   =    p % 4;
                p      /=   4;
                switch(pixel){
                default:
                case 0:break;
                case 1:Bdisp_SetPoint_VRAM(x+k+j*4,y+i,0);break;
                case 2:Bdisp_SetPoint_VRAM(x+k+j*4,y+i,1);break;
                }
            }
      }
    }
}

iis298727 发表于 2011-7-27 14:27:04

能发个完整的源码吗?

GWHBOB 发表于 2011-7-31 12:32:31

用4阶灰度2bit加透明1bit,一byte里还剩5bit=32种可能。表示这个颜色的重复数。
□□■■□□■■□□
□■□□■■□□■□
□□■□□□□■□□
□□□■□□■□□□
□□□□■■□□□□等于2□2■2□2■2□
1□1■2□2■2□1■1□
2□1■4□1■2□
3□1■2□1■3□
4□2■4□
如果是黑白可以略去颜色压缩为 5*10
2,2,2,2,3,1,2,2,2,1,3,1,4,1,5,1,2,1,7,2,4

0x4D2 发表于 2022-10-23 10:33:07

生成器下载不了啊...
页: [1]
查看完整版本: [9860SDK]图片压缩第一弹