• The added line is THIS COLOR.
  • The deleted line is THIS COLOR.
TITLE:Flash SWF format - Lossless

* 可逆圧縮の画像データを保存するタグ [#eea56a0f]
* 例えば細かい模様等は JPEG だとぼやけて困る [#b309022b]
- 可逆圧縮の画像データを保存するタグ
- 例えば細かい模様等は JPEG だとぼやけてダメ
- zlib 圧縮するが PNG とも違う独自フォーマット

*** (20) DefineBitsLossless [#tag20]
#contents

- フォーマットによってパレット形式とビットマップ形式がある
* (20) DefineBitsLossless [#tag20]

- フォーマットによってパレット形式とビットマップ形式がある。どちらも独自形式

-- 共通部分
 +--------------------------------------------------------------------+---
 | tag | length |   length   |  image_id | format |  width  |  height | ...
 |  6  |  0x3f  |            |           |        |         |         |
 +--------------------------------------------------------------------+---
 <-- 2 bytes --><- 4 bytes -><-2 bytes-><-1 byte-><-2 bytes-><-2 bytes->
                               <------------------  length ---(最後まで)
-- format 3 (GIF のようなパレット形式)
-- format 3 (GIF のようなパレット形式)             
 -------------------------------------------+
 ...|colormap_count|  (colormap & indices)  |
    |              |     zlib compressed    |
 -------------------------------------------+
     <-- 2 bytes -><-- contents 残り全部  -->
       RGBの順で並ぶ↓   ↑ zlib compress ↑
                  ------------------------------------------------+
                   |    colormap    |     indices                 |
                  ------------------------------------------------+
                    <-- colormap --><-((width + 3) & -4) * height->
                        count * 3
-- format 4 (実物にお目にかかった事がないけど)
 -------------------------------------------+
 ...|colormap_count|  (colormap & indices)  |
    |              |     zlib compressed    |
 -------------------------------------------+
     <-- 2 bytes -><-- contents 残り全部  -->
                       ↑ zlib compress ↑
                  ------------------------------------------------+
                   |    colormap    |     indices                 |
                  ------------------------------------------------+
                    <-- colormap --><-((width + 3) & -4) * height->
                        count * 2
--- colormap を 0RRRRRGGGGGBBBBB の 16bit (BigEndian)で表現する

                     ↓RGBの順で並ぶ
 -----------------------------------------------------+
 ...|colormap_count|   colormap   |      indices      |
 -----------------------------------------------------+
     <-- 2 bytes -><-- colormap --><- width * height ->
                       count * 3
-- format 4
 見た事ないので省略

-- format 5 (PNG のようなビットマップ形式)
 -------------------------+
 ...|    (bitmap)         |
    |   zlib compressed   |
 -------------------------+
    <- contents 残り全部 ->
       ↑ zlib compress ↑
 -----------------------------+
 ...|        bitmap           | ← XRGB の順で並ぶ (X は padding)
 -----------------------------+
     <-- width * height * 4 -->

      ↓XRGBの順で並ぶ (X は padding)
 ---------------------------+
 ...|         bitmap        |
 ---------------------------+
     <- width * height * 4 ->

*** (36) DefineBitsLossless2 [#tag36]
* (36) DefineBitsLossless2 [#tag36]

- DefineBitsLossless2 に透明度がついたもの。

-- 共通部分 (DefineBitsLossless と同じ)
 +--------------------------------------------------------------------+---
 | tag | length |   length   |  image_id | format |  width  |  height | ...
 |  6  |  0x3f  |            |           |        |         |         |
 +--------------------------------------------------------------------+---
 <-- 2 bytes --><- 4 bytes -><-2 bytes-><-1 byte-><-2 bytes-><-2 bytes->
                               <------------------  length ---(最後まで)
-- format 3 (GIF のようなパレット形式)
 -------------------------------------------+
 ...|colormap_count|  (colormap & indices)  |
    |              |     zlib compressed    |
 -------------------------------------------+
     <-- 2 bytes -><-- contents 残り全部  -->
    ARGBの順で並ぶ↓     ↑ zlib compress ↑
                  ------------------------------------------------+
                   |    colormap    |     indices                 |
                  ------------------------------------------------+
                    <-- colormap --><-((width + 3) & -4) * height->
                        count * 4

                    ↓ARGBの順で並ぶ
 ------------------------------------------------------+
 ...|colormap_count|    colormap   |      indices      |
 ------------------------------------------------------+
     <-- 2 bytes -><-- colormap --><- width * height ->
                       count * 4
-- format 4
 見た事ないので省略

-- format 5 (PNG のようなビットマップ形式)
 -------------------------+
 ...|    (bitmap)         |
    |   zlib compressed   |
 -------------------------+
    <- contents 残り全部 ->
       ↑ zlib compress ↑
 -----------------------------+
 ...|        bitmap           | ← ARGB の順で並ぶ
 -----------------------------+
     <-- width * height * 4 -->

* 備考 [#b2c1a918]

        ↓ ← RGB の順で並ぶ
 ---------------------------+
 ...|         bitmap        |
 ---------------------------+
     <- width * height * 4 ->
 ((width + 3) & -4) * height
- って何じゃらほい。という感じだけど、witdh を4の倍数で合わせるという意味
- ほら、-4 って 2 の補数だと二進数で 1111(略)00 じゃないですか。

 witdh = 1 の場合 => ((1 + 3) & -4) = 4 & 1111(略)00 = 4
 witdh = 2 の場合 => ((2 + 3) & -4) = 5 & 1111(略)00 = 4
 witdh = 3 の場合 => ((3 + 3) & -4) = 6 & 1111(略)00 = 4
 witdh = 4 の場合 => ((4 + 3) & -4) = 7 & 1111(略)00 = 4
 witdh = 5 の場合 => ((5 + 3) & -4) = 8 & 1111(略)00 = 8

- 4の倍数に繰り上げてる。Windows BMP もピクセルデータはこんな並びだし、まぁ普通?
- % 4 とか mod 4 とか書けばいいんだけど、alexref にリスペクトして、あえて、そのままに。(実際、処理速そうだし)


Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes