Salve, stavo sperimentando il multilinguaggio su Python, però ho avuto una serie di problemi con un programma corto corto che mi serviva per capire meglio un dettaglio.
La funzione in C ammette come input un array e parametri relativi alla sua dimensione:
Niente di speciale, semplicemente prende in input una matrice e ne legge il valore scritto in 0,0
Ora devo chiamare questa funzione, creo il file .so (sto su Linux) e poi eseguo il seguente codice:
Dove la funzione chiamata sarà:
Vorrei quindi leggere letteralmente il primo pixel
Solo che la funzione mi restituisce 0 (quindi scrive image: ./Data/cibo/pancake.jpg > ret: 0 )quando invece il l'immagine non è nera (ho provato a testarlo anche su immagini diverse ma niente...)
Infatti il primo pixel (leggendo pixels) ha un colore tipo bianco.
Probabilmente sarà una boiata, ma sto cercando di imparare come si fa e non ne esco. Quindi se avete modo ci starebbe anche una spiegazione della soluzione o degli errori.
La funzione in C ammette come input un array e parametri relativi alla sua dimensione:
C:
int synthex(int pixels[][3], int width, int height)
{
return pixels[0][0];
}
Ora devo chiamare questa funzione, creo il file .so (sto su Linux) e poi eseguo il seguente codice:
Python:
import thesis as th
if __name__ == '__main__':
th.synthesis('./Data/cibo/pancake.jpg')
Python:
from PIL import Image
import ctypes as c
Cshared = c.CDLL("./Csource/shared.so")
pixel_t = c.c_ubyte * 3
def synthesis(image_dir: str):
"""Sintex call a C program."""
img = Image.open(image_dir)
pixels = list(img.getdata())
width, height = img.size
pixelsArray = [pixel_t(0, 0, 0) for _ in range(len(pixels))]
pixels_t = pixel_t * len(pixels)
c_pixels = pixels_t(*pixelsArray)
# call C function
ret = Cshared.synthex(c_pixels, width, height, image_dir)
print('image: ' + image_dir + ' > ret: ', ret)
Vorrei quindi leggere letteralmente il primo pixel
Solo che la funzione mi restituisce 0 (quindi scrive image: ./Data/cibo/pancake.jpg > ret: 0 )quando invece il l'immagine non è nera (ho provato a testarlo anche su immagini diverse ma niente...)
Infatti il primo pixel (leggendo pixels) ha un colore tipo bianco.
Probabilmente sarà una boiata, ma sto cercando di imparare come si fa e non ne esco. Quindi se avete modo ci starebbe anche una spiegazione della soluzione o degli errori.