跳过正文
  1. Posts/
  2. HP-calc/

HP39GII程序-图像处理库 BLib

··853 字·
cerry2022
作者
cerry2022
A little bit about you

Blib:一个带简单压缩算法的图像保存和加载库,可以将2bit色深的灰度图像保存为字符编码

:::info 技术细节

使用两段文本区域分别保存可压缩图像不可压缩图像可压缩图像对应字符区域偏移量1000,不可压缩图像对应字符区域偏移量200; 图像保存顺序为水平扫描,每4像素为一组,不够4像素空位替代,每组需要2^4=16bit,正好是hp39gii的文本编码(Unicode 16)存储一个字符所需的位大小。 扫描过程中对于超过4像素的连续为一个颜色的像素条(连续的一列像素),将保存为压缩格式,长度最长为64。 在读取时,对于不可压缩图像采用PIXON_P函数逐像素点绘制,对于可压缩图像采用LINE_P函数一次性绘制。

实测读取图像并绘制到屏幕上速度较快(相比LsLib) :::

BLib-6491cce9.webp

EXPORT BLOAD(G,X,Y,d)
BEGIN
LOCAL D,Dl:=dim(d(3)),N,I,Px:=X,Py:=Y,c,ch;
//2021.12.10 BLOAD(Grob,StartX,StartY,Data)
//d:={Width,Hight,Data}
FOR D FROM 1 TO Dl DO
    TRACE(asc(mid(d(3),D,1)))ch;
    IF ch1000 THEN
        ch:=ch-1000;N:=ch MOD 64;c:=(ch-N)*.015625;
        LINE_P(G,Px,Py,Px+N,Py,c);
    ELSE
        ch:=ch-200;
        IF Px+3X+d(1) THEN
            X+d(1)-Px-1N;ELSE 3N;END;
        FOR I FROM 0 TO N DO
            ch MOD4c;.25*(ch-c)ch;PIXON_P(G,Px+I,Py,c);
        END;
    END;
    Px+N+1Px;
    IF PxX+d(1) THEN Py+1Py;XPx;END;
END;
END;

EXPORT BSAVE(G,X,Y,W,H)
BEGIN
//2021.12.8
//LINE 1000Start 64Pix
//PIX 4Pix 4Color
LOCAL N,I,Px,Py,c,ch:="";
FOR Py FROM Y TO Y+H-1 DO
    XPx;
    WHILE Px+1X+W DO
        GETPIX_P(G,Px,Py)c;
        FOR N FROM 1 TO 64 DO
            IF GETPIX_P(G,Px+N,Py)c OR Px+NX+W OR N=64 THEN
            IF N4 THEN
                IF Px+N<X+W THEN 4N;END;
                FOR I FROM 1 TO N-1 DO
                    c:=c+4^I*GETPIX_P(G,Px+I,Py);END;
                ch:=ch+char(200+c);
                ELSE ch:=ch+char(1000+64*c+N-1);END;
            Px:=Px+N;BREAK;
            END;//IF
        END;//N
    END;//Px
END;//Py
RETURN {W,H,ch};
END;

//{32,32,"ӇҲϲұҰ϶үүϲƽƻҬҭĘĘЬҭƸćҬńƟҳƉćLJńҸÉćLJńҷÉDŽćƧҷÉƸƗƿҷÉƈƗƿҸÍĸƻƧҹÉÈƻħŇҬDžƋÉÈƻçåŅĥƍϯƻçŅƋҬDŽϮƻħćÔƸƻËÈƛŇƗҭƈËϭċҭDŽүϱËDžćҲϰËƼćұϱËĘǁøҭϱËϬDžãҬϱ×ϬDžþLJƈϭË×ϭŅüÔÔϬËćϮÑƼÌϮ×LJϯÉŅϭË×LJϴÝÈËćҬϴÉøƸ×ҭϲÙÔƸćүϰËËҮҰϰËƸҭҲϲұ"}

点击下载

相关文章