rgb565.py 1.7 KB

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