2011年12月09日投稿 / 2012年01月08日16x16バージョンに変更 / 投稿者 : 名無しさん / タグ : 投稿プログラム ツール 画像圧縮 初代対応 QRコード
16x16のキャラ(スプライト用)データをPIC形式で圧縮するプログラムです。
http://fussy.web.fc2.com/algo/algo8-1.htm
上記パスのロジックを移植したものになります。
掲載のリストでは、SPU0の0〜31(1〜8キャラ目)をエンコードし、 ファンクションキーにDATA文を設定します。
デコーダを組み込んだプログラムに ファンクションに登録したDATA文をペーストするような使い方を想定しています。 デコーダはToukou/PICデコーダをご覧下さい。
以下のような形となります。1文字は0〜Fの16進に使われる文字です。
((前の変更点との距離((色)(縦への連鎖位置)*(3)))|0)*
アスタリスクは直前のデータが0個以上連続することを意味します。 クエスチョンマークは直前のデータが0個または1個あることを意味します。 パイプはORです。
1文字目は不要なデータです。形式上存在するだけ。(エンコーダ・デコーダを変更すれば削減できます) 2文字目以降に色、縦への連鎖位置、区切りを表す3が来て1つ分です。 連鎖位置は-7〜+7となります。 距離が0だった場合は、前の色が15個連続していることを表します。
展開確認は、PICデコーダを使用してください。
配列のサイズやPWやPHを変更すれば、他のサイズの画像にも使用出来るはずです。
その他使いやすいように改造してくださって結構です。
プチコンmkII 向けの QR コードです。
- CLEAR:BGPAGE 0:GPAGE 0:SPPAGE 0
- BANK$=”SPU0”
- COFS=0
- CHRN=8
- DIM PICF(256),PICC(256),PICD(256),PIN$(4)
- KEY 1,”FILES”
- KEY 2,”LOAD”+CHR$(34)
- KEY 3,”SAVE”+CHR$(34)
- KEY 4,”CONT”
- KEY 5,”RUN”
- PP$=””:SUM=0
- FUNC=1
- FOR CHN=0 TO CHRN−1
- FOR CC=0 TO 3
- CHRREAD(BANK$,CC+(COFS+CHN)*4),PIN$(CC)
- NEXT
- GOSUB @CHRREB
- GOSUB @PICPACK
- SUM=SUM+LEN(POUT$)
- L=LEN(POUT$)
- L=L+3
- C=FLOOR(L/93)+(L%93>0)
- IF FUNC==5 AND LEN(PP$)+LEN(POUT$)+3+5*C>256 THEN ?COFS+CHN;”テ゛ チュウタ゛ン”:END
- P$=”DATA ”+STR$(C)+”,”+CHR$(34)+MID$(POUT$,0,91)+CHR$(13)
- POS=91
- IF LEN(P$)+LEN(PP$)>256 THEN KEY FUNC,PP$:FUNC=FUNC+1:PP$=””
- PP$=PP$+P$
- @PLP
- IF POS>=LEN(POUT$) THEN @PEND
- P$=”DATA ”+CHR$(34)+MID$(POUT$,POS,93)+CHR$(13)
- POS=POS+93
- IF LEN(P$)+LEN(PP$)>256 THEN KEY FUNC,PP$:FUNC=FUNC+1:PP$=””
- IF FUNC==6 THEN ?COFS+CHN;”テ゛ チュウタ゛ン”:END
- PP$=PP$+P$
- GOTO @PLP
- @PEND
- ?COFS+CHN;” OK. 256−>”;LEN(POUT$)/256*100;”%
- NEXT
- ?SUM/(CHRN*256)*100;”%”
- KEY FUNC,PP$
- END
- @CHRREB
- PIN$=””:TMP$=””
- FOR I=0 TO 7
- PIN$=PIN$+MID$(PIN$(0),I*8,8)
- PIN$=PIN$+MID$(PIN$(1),I*8,8)
- TMP$=TMP$+MID$(PIN$(2),I*8,8)
- TMP$=TMP$+MID$(PIN$(3),I*8,8)
- NEXT
- PIN$=PIN$+TMP$
- RETURN
- @PICPACK
- PW=16:PH=16:PLEN=1:PDP=0
- GOSUB @SCHGPT
- FOR __Y=0 TO PH−1
- FOR __X=0 TO PW−1
- _POS=__X+__Y*PW
- IF PICF(_POS)==0 THEN @PP2
- PICD(PDP)=PLEN:PDP=PDP+1
- PICD(PDP)=PICC(_POS):PDP=PDP+1
- GOSUB @SCHNPT
- PLEN=0
- @PP2
- IF PLEN==15 THEN PICD(PDP)=0:PLEN=0:PDP=PDP+1
- PLEN=PLEN+1
- NEXT
- NEXT
- POUT$=””
- FOR _I=0 TO PDP−1
- POUT$=POUT$+HEX$(PICD(_I) AND 15)
- NEXT
- RETURN
- @SCHGPT
- PPC=−1
- FOR _SY=0 TO PH−1
- FOR _SX=0 TO PW−1
- _POS=_SX+_SY*PW
- _C=VAL(”&H”+MID$(PIN$,_POS,1))
- IF PPC==_C THEN @SCP2
- PICF(_POS)=1
- PICC(_POS)=_C
- PPC=_C
- GOTO @SCP3
- @SCP2
- PICF(_POS)=0
- @SCP3
- NEXT
- NEXT
- RETURN
- @SCHNPT
- _NC=PICC(_POS):_SX=__X:_SY=__Y
- @SCPLP
- _SY=_SY+1
- IF _SY>=PH THEN @SCLPO
- _I=−7:_SX=_SX+_I
- @SNP0
- IF _SX<0 AND _I<=7 THEN _I=_I+1:_SX=_SX+1:GOTO @SNP0
- @SNP1
- IF _SX>=PW OR _I>7 THEN @SNP2
- _POS=_SX+_SY*PW
- IF PICF(_POS)==0 OR _NC!=PICC(_POS) THEN @SNP10
- PICF(_POS)=0
- GOTO @SNP2
- @SNP10
- _I=_I+1:_SX=_SX+1
- GOTO @SNP1
- @SNP2
- IF _SX>=PW THEN @SCLPO
- PICD(PDP)=_I:PDP=PDP+1
- IF _I==8 THEN @SCLPO
- GOTO @SCPLP
- @SCLPO
- IF _SX>=PW OR _SY>=PH THEN PICD(PDP)=8:PDP=PDP+1
- RETURN
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.121 秒 | このページの最終更新 : 2022/09/20 (火) 12:44:07 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30