あなたの天然記念物
ホーム更新雑談鉄ゲタランドナーコースガイド自転車JKFFハードソフトダウンロードLinuxリンク(Amiga)リンク(その他)連絡先経歴
    目次 ↓下へ ↑上へ
  1. メールソフトYAMでJISを使う方…
  2. 簡単なMakefile作成方法
  3. WWWサーバー Apacheを使ってみる
  4. ネットワークプログラミング
  5. Scala MM400を使いました
  6. メールソフトYAMで漢字を使う方法
  7. AWebIIで漢字を表示する方法
  8. インターネットでNiftyServeへログイ…
  9. チャットしませんか?
  10. インターネットでチャット(IRC)…
  11. あなたのブラウザに挑戦
  12. JKFFについて知っている二、三の…
  13. CD-ROMを焼き焼き
  14. Professional File System 2を使用開…
  15. 日本語エディタJKED
  16. P-MODELから曲を買ってCD-ROMに
  17. OS3.5インストール方法
  18. TAINACO-Eスクリーンブランカ
  19. Linuxとパラレル接続
  20. 動画ファイルを再生
  21. Real time graphics display trigger …
  22. JKFF最新リリース
  23. AmigaDOS3.9(アイコン編)
  24. AmigaDOS3.9(ファイルリクエスタ…
  25. AmigaDOS3.9(パーティション編)
  26. AmigaDOS3.9(AmiDock編)
  27. AmigaDOS3.9(Unarc編)
  28. AmigaDOS3.9(アイコン修正編)
  29. JKFFDisp最新リリース
  30. YAM用日本語マクロ
  31. 最強のAmigaエミュレータAmithlon
  32. MSでぇ得ぬ
  33. HDToolBoxの使い方
  34. 超高速起動のAmithlon
  35. HTMLのテンプレート処理(解説)
  36. ARexxでWorkbenchを制御(Ram D…
  37. ARexxでWorkbenchを制御(メニュ…
  38. あなたのブラウザに挑戦2
  39. BIOS変更で便利に楽しく
  40. Amithlon Contrib3bリリース
  41. Amithlonでキーボードマップを変更
  42. Amithlonでディジタルサウンド
  43. Perlに夢中
  44. ホームページ製作に夢中
  45. ホームページ作成スクリプト完成
  46. スクリプトのモジュール追加
  47. 文字コードチェックのモジュール追加
  48. 画像サイズ追加のモジュール追加
  49. 確率計算スクリプト
  50. タグIMG自動生成スクリプト
  51. ヘッダ生成モジュール改良
  52. 変換モジュール作成
  53. メニューを簡単に変更してみました
  54. Amithlonでアナログ録音
  55. 行変換のモジュール追加
  56. ページ末尾用のモジュール改善
  57. AmigaOSのシャットダウン用スクリ…
  58. ダウンロード用のモジュール追加
  59. ドローソフトの作成
  60. hpwakeのフロントエンド
  61. AmithlonでMIDI演奏
  62. 改行用のモジュール追加
  63. EはエンハンスドのEです
  64. Amithlonを使う方法-01
  65. Amithlonを使う方法-02
  66. Amithlonを使う方法-03
  67. Amithlonを使う方法-04
  68. フォント名の秘密
  69. 画像収集スクリプト
  70. やったね!AmigaOS4.0漢字表示サポ…
  71. 一言メモ-1
  72. DVD-Rを焼き焼き
  73. 海外送金も楽じゃない
  74. シューティングゲーム(の土台)作りま…
  75. Amithlonと行くLinux Kernelの旅
  76. メールソフトYAMで漢字を使う方法
  77. CDプレーヤ MCDPlayer
  78. 痛車が北海道に来るとAmigaで音声合…
  79. はちゅねをAmigaに連れてって
  80. パレット再配置スクリプト
  81. アクセス規制チェックスクリプト
  82. ニコニコ動画のサムネ表示モジュール…
  83. favicon表示対応
パレット再配置スクリプト (2009.03.25)

ImageF/Xでフルカラーを5プレーンCMAPに変換すると、パレットはその画像に最適化されます。複数の画像を変換すると、画像毎に異なるRGB値、パレット順となります。これらの画像を連続で、例えば「画像表示→パレット変更」の順で処理すると画像を表示した際は、まだパレットを変更していなくて、つまり前の画像に合ったパレットのままなので表示色がハチャメチャとなります。もちろん、パレット変更が終了すれば、きちんと見えます。画像を高速(25fps)で切り換えると、ハチャメチャな瞬間が1秒間に25回、現れます。この瞬間を無くすには、画像毎に異なるパレットを統一しておけばいいです。はじめにImageF/Xで固定したパレットに合わせてRGB→CMAPに変換しようと試みましたが失敗です。つぎにAminetを捜索、しかしながら見つけ方が下手っぴなので見つけられません。そこでImageF/Xから呼び出すARexxスクリプトを使って異なる画像間でパレットのマッチング、ピクセルのパレット再配置をやってみました。この機能では複数の画像を使うのが前提なので、複数画像の一括処理ソフトAutoFX用にしました。
変換開始の際にパレットの基準となる画像を指定、1枚目を処理する際に開いてパレットを取得、あとは1枚ずつ、基準パレットとマッチングして変更しています。マッチングは単純にRGBの3次元色空間で最寄のパレットを捜します。
/*
 * $VER: RelocatePalette.ifx.pre 1.0 (24.03.09)
 * Freely re-distributed.
 * Written by olfa
 *
 * Relocate CMAP to same CMAP.
 *
 * Inputs:
 *    Word(Arg(1),1) = Sequence number (?)
 *    Word(Arg(1),2) = Total number of frames (N)
 *
 * Returns:
 *    0 if successful, non-zero on failure
 *
 */

OPTIONS RESULTS

ADDRESS IMAGEFX.1

base = 'Autofx_RelocatePalette_'

basename = base || 'Base'
basepath = GETCLIP(basename)

palettename = base || 'palette_'

IF basepath = "" THEN DO
   GetPrefs SavePath
   basepath = result
END

Gadget.1 = 'STRING  175  5 200 14 "Palette Base Image:" "'basepath'"'
Gadget.2 = 'FILEREQ 366  5  20 14 "Palette Base Image:" "'basepath'" AT=1'
Gadget.3 = 'END'

NewComplexRequest '"Relocate Palette"' Gadget 405 27
IF rc ~= 0 THEN DO
    EXIT rc
END

CALL SETCLIP(basename, result.1)

CALL SETCLIP(base || 'palnum', '')

i = 0
DO WHILE i < 256
    SETCLIP(palettename || i, '')

    i = i + 1
END

EXIT 0
/*
 * $VER: RelocatePalette.ifx.pre 1.0 (24.03.09)
 * Freely re-distributed.
 * Written by olfa
 *
 * Relocate CMAP to same CMAP.
 *
 * Inputs:
 *    Word(Arg(1),1) = Frame number (1 - N)
 *    Word(Arg(1),2) = Main filename ("-" if not specified)
 *    Word(Arg(1),3) = Swap filename ("-" if not specified)
 *    Word(Arg(1),4) = Sequence number (?)
 *    Word(Arg(1),5) = Total number of frames (N)
 *
 * Returns:
 *    0 if successful, non-zero on failure
 *
 */

OPTIONS RESULTS

ADDRESS IMAGEFX.1

framenum = Word(Arg(1),1)
mainname = Word(Arg(1),2)
swapname = Word(Arg(1),3)
seq      = Word(Arg(1),4)
framemax = Word(Arg(1),5)

base = 'Autofx_RelocatePalette_'

base.path = GETCLIP(base || 'Base')
base.palnum = GETCLIP(base || 'palnum')
base.palettename = base || 'palette_'

/* gracefully exit if no buffer */
GetMain
IF rc ~= 0 THEN DO
    EXIT 0
END

org.name = WORD(RESULT, 1)
org.width = WORD(RESULT, 2)
org.height = WORD(RESULT, 3)
org.palnum = WORD(RESULT, 13)

base.palnum = GETCLIP(base || 'palnum')
IF '' == base.palnum THEN DO
    LoadBuffer base.path new
    IF rc ~= 0 THEN DO
        EXIT rc
    END

    GetMain
    base.palnum = WORD(RESULT, 13)
    SETCLIP(base || 'palnum', base.palnum)

    i = 0
    DO WHILE i < base.palnum
        GetPalette i
        SETCLIP(base.palettename || i, RESULT)

        i = i + 1
    END
    KillBuffer Force

    SelectBuffer org.name
END

i = 0
DO WHILE i < base.palnum
    rgb = GETCLIP(base.palettename || i)
    base.palette.i.r = WORD(rgb, 1)
    base.palette.i.g = WORD(rgb, 2)
    base.palette.i.b = WORD(rgb, 3)

    i = i + 1
END

Menu Palette
org.menu = RESULT

i = 0
DO WHILE i < org.palnum
    GetPalette i
    org.r = WORD(RESULT, 1)
    org.g = WORD(RESULT, 2)
    org.b = WORD(RESULT, 3)
    
    foundit = 0
    target = (255 ** 2) * 3 + 1
    j = 0
    DO WHILE j < base.palnum
        try_val = (org.r - base.palette.j.r) ** 2 + (org.g - base.palette.j.g) ** 2 + (org.b - base.palette.j.b) ** 2
        IF try_val < target THEN DO
            target = try_val
            foundit = j
        END

        j = j + 1
    END
    palconv.i = foundit

    SetPalette i base.palette.i.r base.palette.i.g base.palette.i.b
    RedrawPalette

    i = i + 1
END

Menu org.menu

BeginBar "ReLoc_Pal" org.height
y = 0
DO WHILE y < org.height
    x = 0
    DO WHILE x < org.width
        GetPixel x y
        oldpal = WORD(RESULT, 1)
        newpal = palconv.oldpal
        PutPixel x y newpal newpal newpal

        x = x + 1
    END

    Bar y
    y = y + 1
END

EndBar

Redraw

EXIT 0
どのページも無断でリンクして構いません。
Valid HTML 4.01 Transitional