RGB565カラーパッカー
このRGB565カラーパッカーは、8ビットの赤・緑・青チャンネルを、組み込みディスプレイ、マイクロコントローラー、画像素材、フレームバッファーで使われるコンパクトな16ビット形式へ変換します。RGB565ワードからスケーリング済みチャンネルへの展開にも対応します。各変換では、10進値、ゼロ埋めした16進値、5・6・5ビットの各欄、往復変換後の表示色を返します。厳密な検証により、範囲外のチャンネルや不正な値が別の色へ暗黙に変わることを防ぎます。
無料で実行
3つの8ビットチャンネルをRGB565ワードへまとめます
パック操作を選び、0から255までの整数でr、g、bチャンネルをご指定ください。変換器は、まず赤と青を8ビットから5ビットへ量子化し、0から31の範囲にします。緑にはRGB565で1ビット多く割り当てられるため、6ビットの0から63へ量子化します。各変換では比例スケーリングと最近接整数への丸めを使います。そのため0と255は両端へ正確に対応し、中間色は利用可能な最も近い段階になります。続いて赤をビット15から11、緑をビット10から5、青をビット4から0へ配置し、OR演算で符号なし16ビット整数に結合します。応答には10進値と、常に4桁へ整えた16進値が含まれます。Cの定数、バイナリエンコーダー、ディスプレイドライバー、参照表、テストフィクスチャーへそのまま利用しやすい形式です。各成分も個別に返すため、説明のない数値だけを受け取るのではなく、処理の各段階をご確認いただけます。
量子化と往復変換の結果をご理解いただけます
RGB565は、16,777,216通りの24ビットRGB入力を65,536個の値で表すため、すべての色を保持できません。近い複数の色が同じワードになり、パック時に失われた下位情報は展開しても復元できません。この損失を明確にするため、パック結果には生成ワードが表す8ビット色のオブジェクトを含めています。展開時には5ビットの赤と青を255倍して31で割り、最近接整数へ丸めます。緑も同様に255と63を使います。この比例規則は決定的で、両端を正確に写し、JavaScript、C、Rust、Pythonなどで容易に再現できます。往復後のチャンネルが入力と少し異なる場合がありますが、これは想定された量子化であり、障害ではありません。縮小ビット欄、パック済みワード、展開済みチャンネルをまとめて確認できるため、実装比較、バイト順の取り違えの調査、色定数の検証、対象ディスプレイや画像素材に精度が十分かどうかの判断に役立ちます。
既存値を展開し、形式上の誤りを防ぎます
ファームウェア、フレームバッファー、プロトコルキャプチャー、画像ファイルからRGB565ワードを取得済みの場合は、アンパック操作をお選びください。valueには0から65535までの10進数字、または0x接頭辞付き16進数をご指定いただけます。負数、小数、接頭辞のない16進文字、末尾の余分な文字、符号なし16ビット範囲を超える値は、切り捨てずに拒否します。出力には正規化した10進整数、ゼロ埋めした16進表記、保存された3つのビット欄、スケーリング済みのr、g、bチャンネルが含まれます。RGB565が定めるのはビット配置であり、バイト順ではありません。機器や形式によって上位または下位バイトが先になるため、入力元が逆順なら変換前に入れ替えてください。また、赤と青の位置が逆のBGR565とも異なります。本ツールは上位側を赤、下位側を青として扱います。単発確認はブラウザーで行え、自動化、テスト、診断のAPIリクエストは1件$0.002です。
活用例
ディスプレイ定数を生成します
デザイン上のRGBチャンネルを、ファームウェア、ドライバー、参照表向けの4桁RGB565値へ変換します。
フレームバッファーの画素を検証します
取得した16ビットワードを展開し、そのチャンネルをテストで期待する色と比較します。
言語間のフィクスチャーを作成します
入力、縮小欄、パック済みワード、復元チャンネルを記録し、機器とアプリ間で一貫したテストを行います。
よくある質問
8ビットチャンネルはどのように縮小しますか?
赤と青はround(チャンネル × 31 ÷ 255)、緑はround(チャンネル × 63 ÷ 255)を使います。
展開後の色が入力と異なるのはなぜですか?
パック時に下位情報が失われるためです。復元値はRGB565ワードで表せる最も近い色です。
展開できる入力形式は何ですか?
0から65535までの10進数字、または0xF800のような0x接頭辞付き16進文字列をご利用ください。
バイトの入れ替えも行いますか?
いいえ。数値としてのRGB565ワードを変換します。バイト形式の読み書き時に順序をご処理ください。
API変換の料金はいくらですか?
APIリクエスト1件につき$0.002です。ブラウザーでの対話的な変換もご利用いただけます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/rgb565-pack \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"r":255,"g":128,"b":0}'const res = await fetch("https://api.kit.forhosting.com/dev/rgb565-pack", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"r": 255,
"g": 128,
"b": 0
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/rgb565-pack",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"r": 255,
"g": 128,
"b": 0
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/rgb565-pack", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"r":255,"g":128,"b":0}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"r":255,"g":128,"b":0}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/rgb565-pack", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"r": 255,
"g": 128,
"b": 0
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.rgb565_pack",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |