RGBA -> RGB565
09.01.2024
from PIL import Image;
import numpy as np
import ctypes

filename = input('Ender image name: ');
filename += ".png";

#file opening
try:
    im = Image.open(filename);
except FileNotFoundError:
    print('file not found, please try again');
    input();
    exit();
#getting size
size = im.size;
# getting image as array
a = np.asarray(im);
result = [];

def conv32_16(r , g , b):
    """function get r, g , b as int and return appropriate 16int"""
    b = int( b / 8 ); # >> 3
    b = b << 11;
    g = int( g / 4 ); # >> 2
    g =  g << 5;
    r = int( r / 8 ); # >> 3
    temp1 = b + g + r;
    
    # swap bytes order
    temp2 = temp1 >> 8;
    tenp3 = temp1 << 8;
    temp1 = temp2 + tenp3;
    # rrrrr gggggg bbbbb
    # (<<11)  (<<5)  (<<0)
    return ctypes.c_int16( temp1 );

OutFile = filename.split(".");

OutFile[1] = "bin";

filename1 = ".".join(OutFile);


f_obj = open(filename1, 'wb');

# writing to file
for i in list(range(0 , size[1])):
    for j in list(range(0 , size[0])):
        temp = a[i][j];
        f_obj.write(conv32_16(temp[2] , temp[1] , temp[0]));

f_obj.close();

print('saved as ' + filename1);
input();