# GR-PEACH JPEGモジュール (jpeg)

`jpeg` モジュールは、GR-PEACHマイコンに搭載されたJPEGコーデックを用いてJPEG画像のエンコード・デコードを行います。

## jpeg.encode(image, callback)

- `image` {Object} エンコードする画像
  - `width` {number} 画像の幅(ピクセル数)。必須項目です。この値は偶数でなければなりません。
  - `height` {number} 画像の高さ(ピクセル数)。必須項目です。
  - `format` {string} 画像のピクセルフォーマット。`"ycbcr422"`のみが指定可能です。必須項目です。
  - `bitmap` {AlignedBuffer} 画素データ。必須項目です。32バイトのアライメントである必要があります。
- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
  - `jpegData` {AlignedBuffer} JPEGデータを格納したバッファ。32バイトのアライメントです。
- 戻り値: {undefined}

ビットマップ画像をJPEG画像に変換します。処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

#### 使用例

    var jpeg = require('jpeg');
    var fs = require('fs');
    var AlignedBuffer = require('aligned_buffer').AlignedBuffer;

    var bitmap = new AlignedBuffer(480 * 272 * 2, 32);
    /* bitmap に画像データを格納する... */
    var image = {
      width: 480,
      height: 272,
      format: 'ycbcr422',
      bitmap: bitmap
    };
    jpeg.encode(image, function(err, jpegData) {
      if (err) {
        console.log(err);
        return;
      }
      /* ファイルに保存する */
      fs.writeFile('/sd/output.jpg', jpegData.toBuffer(), function(err) {
      });
    });

## jpeg.encodeSync(image)

- `image` {Object} エンコードするビットマップ画像
  - `jpeg.encode()`の説明を参照
- 戻り値: {AlignedBuffer} JPEGデータを格納したバッファ。32バイトのアライメントです。

`jpeg.encode()`の同期版です。処理は同期で行われ、処理が完了するとJPEGデータを格納したバッファを返却します。失敗すると例外をスローします。

#### 使用例

    var jpeg = require('jpeg');
    var fs = require('fs');
    var AlignedBuffer = require('aligned_buffer').AlignedBuffer;

    var bitmap = new AlignedBuffer(480 * 272 * 2, 32);
    /* bitmap に画像データを格納する... */
    var image = {
      width: 480,
      height: 272,
      format: 'ycbcr422',
      bitmap: bitmap
    };
    try {
      var jpegData = jpeg.encodeSync(image);
      /* ファイルに保存する */
      fs.writeFileSync('/sd/output.jpg', jpegData.toBuffer());
    } catch (err) {
      console.log(err);
    }

## jpeg.decode(jpegData, config, callback)

- `jpegData` {AlignedBuffer} JPEGデータを格納したバッファ。32バイトのアライメントである必要があります。
- `config` {Object} デコード設定。
  - `width` {number} 出力するビットマップの幅(ピクセル数)。この値は偶数でなければなりません。
  - `height` {number} 出力するビットマップの高さ(ピクセル数)。
  - `format` {string} 出力するビットマップのピクセルフォーマット。`"ycbcr422"`,`"rgb565"`,`"argb8888"`のいずれか。
  - `alpha` {number} ピクセルフォーマットが`"argb8888"`のときの透過度。`0`～`255`の値。(省略時: `255`)
- `callback` {Function} コールバック関数
  - `err` {Error|null} エラーオブジェクト(失敗のとき) または `null`(成功のとき)。
  - `image` {Object} デコードされたビットマップ画像
    - `width` {number} 画像の幅(ピクセル数)。
    - `height` {number} 画像の高さ(ピクセル数)。
    - `format` {string} 画像のピクセルフォーマット。`"ycbcr422"`,`"rgb565"`,`"argb8888"`のいずれか。
    - `bitmap` {AlignedBuffer} 画素データ。32バイトのアライメントです。
- 戻り値: {undefined}

JPEGデータをビットマップ画像に変換します。処理は非同期で行われ、処理が完了または失敗すると、コールバック関数が呼び出されます。

#### 使用例

    var AlignedBuffer = require('aligned_buffer').AlignedBuffer;
    var jpeg = require('jpeg');
    var fs = require('fs');
    var config = {
      width: 480,
      height: 272,
      format: 'argb8888',
      alpha: 0xFF
    };
    fs.readFile('/sd/input.jpg', function(err, jpegData) {
      if (err) {
        /* ファイル読み込み失敗... */
        console.log(err);
        return;
      }
      var buf = new AlignedBuffer(jpegData, 32);
      jpeg.decode(buf, config, function(err, image) {
        if (err) {
          /* デコード失敗... */
          console.log(err);
          return;
        }
        /* 成功... */
      });
    });

## jpeg.decodeSync(jpegData, config)

- `jpegData` {AlignedBuffer} JPEGデータを格納したバッファ。32バイトのアライメントである必要があります。
- `config` {Object} デコード設定。
  - `width` {number} 出力するビットマップの幅(ピクセル数)。この値は偶数でなければなりません。
  - `height` {number} 出力するビットマップの高さ(ピクセル数)。
  - `format` {string} 出力するビットマップのピクセルフォーマット。`"ycbcr422"`,`"rgb565"`,`"argb8888"`のいずれか。
  - `alpha` {number} ピクセルフォーマットが`"argb8888"`のときの透過度。`0`～`255`の値。(省略時: `255`)
- 戻り値: {Object} デコードされたビットマップ画像
  - `width` {number} 画像の幅(ピクセル数)。
  - `height` {number} 画像の高さ(ピクセル数)。
  - `format` {string} 画像のピクセルフォーマット。`"ycbcr422"`,`"rgb565"`,`"argb8888"`のいずれか。
  - `bitmap` {AlignedBuffer} 画素データ。32バイトのアライメントです。

`jpeg.decode()`の同期版です。処理は同期で行われ、処理が完了するとビットマップ画像を格納したオブジェクトを返却します。失敗すると例外をスローします。

#### 使用例

    var AlignedBuffer = require('aligned_buffer').AlignedBuffer;
    var jpeg = require('jpeg');
    var fs = require('fs');
    var config = {
      width: 480,
      height: 272,
      format: 'argb8888',
      alpha: 0xFF
    };
    try {
      var jpegData = fs.readFileSync('/sd/input.jpg');
      var buf = new AlignedBuffer(jpegData, 32);
      var image = jpeg.decodeSync(buf, config);
      /* 成功... */
    } catch (err) {
      console.log(err);
    }