#!/usr/bin/python3 import sys import argparse from PIL import Image def rgb565_convert(image_path, output_path ,order='little'): """ 画像をRGB565形式に変換し、バイナリファイルに保存します。 Args: image_path: 入力画像のパス output_path: 出力バイナリファイルのパス """ try: img = Image.open(image_path).convert("RGB") # RGBに変換 except FileNotFoundError: print(f"Error: 画像ファイル '{image_path}' が見つかりません。") return except Exception as e: print(f"Error: 画像を開く際にエラーが発生しました: {e}") return width, height = img.size with open(output_path, "wb") as f: for y in range(height): for x in range(width): r, g, b = img.getpixel((x, y)) # RGB565に変換 r5 = r >> 3 # 上位5ビット g6 = g >> 2 # 上位6ビット b5 = b >> 3 # 上位5ビット rgb565 = (r5 << 11) | (g6 << 5) | b5 # バイナリ書き込み (リトルエンディアン) f.write(rgb565.to_bytes(2, byteorder=order)) print(f"画像 '{image_path}' をRGB565形式に変換し、'{output_path}' に保存しました。") if __name__=="__main__": parser = argparse.ArgumentParser() parser.add_argument("files",type=str,nargs="*") parser.add_argument("--order", type=str, choices=['little', 'big'], default="little") args = parser.parse_args() files = args.files order = args.order if len(files) != 2: print("Usage: rgb565.py infile outfile [--order little | big ]") else: rgb565_convert(files[0], files[1], order)