Touchscreen Seeed Studio, image .jpeg

Salut à tous,

J'ai acheté un Touchscreen de Seeed Studio, reçu hier, avec un bus pirate :slight_smile:
Le lien de l'écran: http://www.seeedstudio.com/depot/28-tft-touch-shield-p-864.html?cPath=132_134

J'ai pu très rapidement faire joujou avec, en fait je n'ai que testé le sketch de test.

Je me posais simplement la question de savoir s'il est possible de lire une image .jpeg sans carte SD.
Je m'explique: j'aimerais décoder une image .jpeg en données exploitables par ma UNO, puis automatiser l'écriture de l'image sur l'écran.

Pour cela, je cherche à savoir de quelle sorte sont les données d'une image, en particulier la couleur et les coordonnées de chaque pixel.
Quelqu'un a une idée, des pistes à explorer?

Merci pour toute réponse :slight_smile:

Yep!

Pour génerer des images au format .h, je travaille avec the gimp pour la partie graphique, dimension de l'image, nombre de couleurs, etc.
Ensuite, la conversion s'effectue avec image2GLCD.

Pour ma part, mon afficheur gère 4 niveaux de gris seulement.

Il existe un certain nombre de logiciel pour convertir des images vers un format exploitable directement par l'arduino. Sous forme de librairie géneralement, utilisant une partie de la mémoire flash via PROGMEM.
Le problème est qu'un certain nombre d'entre eux sont payants ou limités à une démo.

@+

Zoroastre.

salut je ne peux pas t'aider du point de vue de la programmation mais : je peux juste te dire ceci...

le format JPEG est une compression d'image et pas un fichier image ...

par analogie sa reviendrais a comparé un fichier wav a un MP3

après une fichier image c'est une fichier écrit comme un tableau excel ou tu dirais simplement A1 code couleur HEX B1 ,Etc...

car visuellement c'est le même processus qu'un écran cathodique du Rouge du Vert et du bleu...

peut etre qu'il y a des idée non pas avec arduino mais plutôt sur le chip...

Avoir une carte arduino ne veux pas dire qu'on n'est obligé de passé par le soft tu peux passé par un vulgaire traitement de texte genre notepad et après le GCC avec la librairie Atmel...
mais comment j'ai pas encore compris ce que c'est que l'isp ou le dragon ou le jtag c'est du turque pour moi

en espérant avoir au moins te mettre sur une piste

cordialement

poisson dino

Salut,

Alors pour le format jpg comme le disait poisson_dino c'est un format compressé (et pas qu'un peu) donc pas exploitable avec un arduino :wink:
Par contre les .bmp tu peut vu que c'est pas compressé, il existe des lib tout prête même :wink:
(Enfin c'est valable que si l'image est stocké sur un SD, car si c'est coté ordi, il peut lire le .jpg puis le convertir en bmp puis en .h)

Perso pour stocker mes images en flash et les afficher par la suite sur mon écran TFT j'avais fait un script python qui convertissez l'image en un progmem byte[lcd_h * lcd_l * 3].
Je récupérai 3 octets à la fois (R, G, B) que j'envoyai sur l'écran, et comme je stockai la taille de l'image source pas besoin d'avoir un "carte" des positions des pixel.

Tu as aussi des technique de compression simple, tu devrai regarder du coté de la gestion des sprites de gameduino ça pourrait t'intéresser :wink:

je ne suis pas d'accord avec toi SkyWodd... pas compatible avec arduino ???

Arduino n'est pas un microcontroleur mais une méthode, et une philosophie d'approche.

je pense moi que la solution de son probleme va se trouvé plus du coté du langage C# pur pour le controleur Atmel car si Linux a une lib pour lire un jpeg on doit bien pouvoir exploiter un code source pour le transbahuter sur un microcontroleur....

Vu que le code source de tous programmable Ecrit en C ou C# demeure en pur théorie portable...

apres on va entré dans un debat de programmation Hard...

mais je pense qu'on doit pouvoir exploité du jpeg avec une librairie mais pas avec arduino mais avec l'atmega directement...

poisson_dino:
je ne suis pas d'accord avec toi SkyWodd... pas compatible avec arduino ???

Je le répète, faire de la décompression de .jpg c'est physiquement pas possible, un ATmega328p c'est un cpu 8bits, avec 4Ko de ram, décompresser un .jpg sur 4Ko de ram (sans compter le fait que sur les 4Ko une partie n'est pas utilisable (stack, etc ...)) c'est un peu chaud quand même ...

poisson_dino:
je pense moi que la solution de son probleme va se trouvé plus du coté du langage C# pur pour le controleur Atmel car si Linux a une lib pour lire un jpeg on doit bien pouvoir exploiter un code source pour le transbahuter sur un microcontroleur....

Du C# sur un µc 8bit ... balése le µc ... le seul portage sur µc du .net framework c'est le .net micro framework qui nécessite un arm7 pour fonctionner (-> netduino et autre FEZ duino).

poisson_dino:
mais je pense qu'on doit pouvoir exploité du jpeg avec une librairie mais pas avec arduino mais avec l'atmega directement...

Arduino = atmega, arduino c'est juste une surcouche logiciel, un ide et un bootloader donc ce que tu dis n'as pas de sens, ce que tu ne peut pas faire sur un arduino est forcément irréalisable sur un atmega puisque qu'une carte arduino c'est un ATmega...

Yep!

Le decodage est impossible. La librairie jpeg est d'une part trop lourde pour un 8 bits et d'autre part trop consommatrice d'energie pour un 8 bits.

Je reviens rapidement sur The Gimp car il est possible d'enregistrer son image directement en .c ou .h
D'autres formats semblent également exploitables comme le .xbm par exemple...

Photoshop a peut être des formats d'export similaires.

Les fichiers ainsi générés pourront te donner une bonne idée du contenu de l'image.

@+

Zoroastre.

Bonsoir,

Tout d'abord, merci à vous 3 pour vos réponses.

zoroastre, je ne suis plus sur mon PC ce soir, je verrai demain ce que donne une image enregistrée en .h :slight_smile:
Je ferais aussi des recherches sur la possibilité d'acquérir la couloeur de chaque pixel, dans l'ordre horizontal * vertical, d'une image, que ce soit avec un script ou autre.

poisson_dino, je dois me ranger de l'avis de skywodd. Son analyse est plus que sensée, surtout quand on voit les connaissances du bonhomme.
Au fait, tu ne voulais pas dire C++ (C incrémenté) à la place de C# (C charpe)?

schizophrene:
zoroastre, je ne suis plus sur mon PC ce soir, je verrai demain ce que donne une image enregistrée en .h :slight_smile:
Je ferais aussi des recherches sur la possibilité d'acquérir la couleur de chaque pixel, dans l'ordre horizontal * vertical, d'une image, que ce soit avec un script ou autre.

Pour avoir la couleur d'un pixel en particulier soit tu fait un tableau à plusieurs dimension classique, soit tu fait un tableau simple à une dimension et tu calcul la position du pixel dans le tableau suivant la taille de chaque ligne (ça revient à faire l'équivalent d'un tableau à deux dimensions à la main).

Sinon technique simple de compression d'image que je viens d'imaginer :

  • un 1er tableau contenant jusqu'à 256 valeurs, à savoir les couleurs RGB les plus souvent utilisées dans l'image,
  • un deuxième tableau contenant uniquement la référence couleur du 1er tableau tableau de chaque pixel.
    Avantage : normalement l'image est composé de 3 octets par pixel (RGB) -> beaucoup, avec mon truc un pixel = 1 octet et comme souvent une image est composé que de quelques couleurs principal ça réduit vachement la taille final du truc.
    Faudrait que j'approfondisse mon systéme mais je suis sur que ça pourrait donner un truc pas mal !

schizophrene:
Au fait, tu ne voulais pas dire C++ (C incrémenté) à la place de C# (C charpe sharp)?

:grin:

Salut à tous!

skywodd, j'avoue avoir un peu de mal à comprendre ce que tu veux faire avec ces 2 tableaux... T'as une explication plus simple? :slight_smile:

J'ai enregistré une image en .c et .h avec GIMP2... Résultat: à mon niveau, c'est assez flou pour comprendre:

/* GIMP RGB C-Source image dump (flower.c) */

static const struct {
  guint  	 width;
  guint  	 height;
  guint  	 bytes_per_pixel; /* 3:RGB, 4:RGBA */ 
  guint8 	 pixel_data[240 * 320 * 3 + 1];
} gimp_image = {
  240, 320, 3,
  "\233\247\201~\213\\Sf/GX\40FS\30BQ\21?L\23:L(Vo_\254\267\267\307\311\311"
  "\314\314\315\320\317\331\340\342\346\264\300\247Ba\25""5O\14""5S\14""6X\25"
  "OoQ\243\270\265\330\341\342\356\360\362\367\370\371\372\373\374\373\375\375"
  "\373\375\375\371\372\372\364\364\367\360\360\364\355\357\364\345\352\356"
  "\317\332\324w\221_Gf\23B_\16;X\14""6S\10/L\7*K\3,K\3""6Q\10F[\21Ld\25Sl\32"
  "at#jy(p}*p\201%s\202%t\205*o\201*dw\40\\p\32\\t\32\\z\32_}\32a~\32_~\30a"
  "\201\30d\202\30g\201\32dz\36at\32as\36ap\30Xg\16Vf\3[o\7_w\10Xs\7Oj\10G_"
  "\16F_\36Sl:dwLt~\\\205\213l\213\225t\217\227z\216\222z\211\213s\201\206g"
  "z\201_z~\\yz[ooOfg?fl5js5gt5fy6a};t\222o\271\311\306\342\352\355\363\365"
  "\370\373\372\375\375\375\375\375\377\376\376\376\377\373\375\376\353\362"
  "\362\323\335\331\211\217ydd:\\d,\\f(_l(\\j#[j#Xl#[o%at/o~?\201\212V\222\225"
...

......................................................

/*  GIMP header image file format (RGB): C:\Users\Schizophrene\Desktop\flower.h  */

static unsigned int width = 240;
static unsigned int height = 320;

/*  Call this macro repeatedly.  After each use, the pixel data can be extracted  */

#define HEADER_PIXEL(data,pixel) {\
pixel[0] = (((data[0] - 33) << 2) | ((data[1] - 33) >> 4)); \
pixel[1] = ((((data[1] - 33) & 0xF) << 4) | ((data[2] - 33) >> 2)); \
pixel[2] = ((((data[2] - 33) & 0x3) << 6) | ((data[3] - 33))); \
data += 4; \
}
static char *header_data =
	"G[?\"@IN=5W9P2VAA2F-91F%20UQ4/EQI6G^@L,?XR]H*T-T.U-`:Y/,GN-#H1G%6"
	".5]-.6--.FA64W^2I\\CVW/(C\\P$S^`DZ_PP]_`X^_`X^_@L[^04X]0$U\\?`UZ?LO"
	"T^L5>Z&@2W941F]//VA-.F-),UQ(+EM$,%M$.F%)2FM24'165WQ;981D;HEI=(UK"
	"=)%F=Y)F>)5K<Y%K:(=A8(!;8(1;8(I;8XU;98Y;8XY999%9:))9:Y%;:(I?981;"
	"98-?98!97'=/6G9$7W](8X=)7(-(4WI)2V]/2F]?5WQ[:(>->(Z=B9NMCZ6UDZ>["
	"DJ*[C9NTA9:H?I&@?HZ=?8J<<W^0:G=`:GQV;H-V:X1V:HEW98U\\>**PO=H'YOLN"
	"]`8Y_`L^`@X^`@`_`P\\`_`X_[`,SU^X:C9^Z:'1[8'1M8'9I8WQI8'ID7WID7'QD"
	"7W]F981P<XY`A9J7EJ6KI*VZL;?'MK[+M+_'L+K\"IK*UF:RB@J&,<YE[:I5M:Y)K"
	";HYK:HUF8XUD8XEF8(1I8(1I8(1K8(1K7X-I7(!I6G]F5WQA57I;4W=94'=44W=4"
...

Quand je prends Image2GLCD, proposé par zoroastre, j'obtiens quelque chose de bien plus compréhensible:

// this file generated by Image2GLCD
const unsigned char img[3840] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
...

Dans tous les cas, la taille des fichiers est... Grande! Peut être un peu trop.

Yep!

Le xbm donne çà aussi avec de la couleur :

#define Logo_width 320
#define Logo_height 240
static unsigned char Logo_bits[] = {
   .....
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0x76, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x5b,
   0xab, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0x7f, 0x5b, 0x55, 0xad, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xd5, 0xda, 0x5a, 0x5b, 0xfd, 0xff,
   0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0x56, 0xab,
   0x6a, 0xb5, 0xea, 0xff, 0x89, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xb5, 0xb5, 0xda, 0x5a, 0xab, 0x55, 0xff, 0x22, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xbf, 0xad, 0x6a, 0x55, 0xab, 0xaa, 0xda, 0xff,
   0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x6a, 0xab, 0xb5,
   0x5a, 0x5b, 0xab, 0xfe, 0x42, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0x6f, 0xab, 0x5a, 0x6b, 0xb5, 0xb6, 0xb6, 0xff, 0x6a, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xab, 0x5a, 0xab, 0xaa, 0x55, 0x55, 0x55, 0xfd,
   0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xad, 0xd6, 0x6a, 0x5b,
   0x6d, 0xb5, 0xb5, 0xfe, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xb5, 0xb5, 0x56, 0xd5, 0xaa, 0xad, 0x56, 0xfd, 0xc3, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0x5f, 0xab, 0xaa, 0x5a, 0x55, 0xab, 0x6a, 0xd5, 0xfa,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x5a, 0xd5, 0x6a, 0x5b,
   0x6d, 0x55, 0x5b, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f,
   0xd5, 0xb6, 0xd6, 0x6a, 0x55, 0x5b, 0xb5, 0xfa, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0x57, 0x5b, 0x55, 0x55, 0xab, 0x6d, 0xb5, 0xaa, 0xf5,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0xd5, 0xd6, 0xb6, 0x5a,
   0x55, 0xab, 0xad, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb,
   0x5a, 0xad, 0xaa, 0xd6, 0x6a, 0xb5, 0x5a, 0xd5, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xb6, 0x56, 0xb5, 0xad, 0x55, 0x5b, 0xab, 0xb5, 0xb5,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xaa, 0xb5, 0x55, 0x6b, 0xad,
   0xaa, 0xb6, 0x56, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa,
   0x6a, 0x1d, 0xac, 0xda, 0xb6, 0xaa, 0xa2, 0x55, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0x5f, 0x5b, 0xab, 0x02, 0x58, 0x55, 0xd5, 0xda, 0x80, 0x5a,
   0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0xb5, 0xd6, 0x06, 0xd0, 0xd6,
   0xaa, 0x55, 0x00, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xab,
   0x5a, 0x03, 0xb0, 0x5a, 0x5b, 0x2d, 0x00, 0xaa, 0xfa, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0x5b, 0xb5, 0x55, 0x01, 0xc0, 0xaa, 0xaa, 0x2a, 0x00, 0x6e,
   0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0x56, 0xb5, 0x00, 0xa0, 0xb5,
   0xb6, 0x1d, 0x00, 0xa8, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
   0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x55, 0xb5,
   0xd6, 0x00, 0x80, 0xd6, 0xaa, 0x0a, 0x00, 0xac, 0xfa, 0xff, 0xff, 0xff,
 ......

Perso, je n'y comprends pas grand chose au codage RGB utilisé ici ou ailleurs.
Le 0xff, c'est du noir et 0x00, c'est du blanc. (je suis fort hein :. )

Pour évoquer légerement Image2GLCD. Le codage noir et blanc se fait en 8 bits par defaut, 1 bit/pixel.

PIXEL: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8
CODE: 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1

Si tous les pixels sont exités/noir, le total vaut 255 (ou 0xff en hexa).

@+

Zoroastre.

Tiens, je n'ai pas testé en .xbm...

Une image de cette taille donne 76800 pixels, multiplié par 3 octets pour les couleurs RGB.
Il se peut que ton fichier .xbm comporte 230400 octets. Qui est chaud pour compter? ^^

Yep!

Logo_Microchip_320x240.xbm --> 58.7 Kb pour 803 lignes.

C'est sur que çà fait du lourd.
Mais je ne vois pas d'autres options pour obtenir des images sur un afficheur sans support sd. Il te faudra peut être sacrifier la couleur ou réduire la taille des images à des niveaux acceptables pour toi.

Je n'ai jamais exploité directement les exports de Gimp dans une appli arduino. Elles semblent à première vue viable.

Tu exploites l'arduino pour stocker tes images ou l'afficheur ???

dixit ST7781R datasheet : Display data can be stored in the on-chip display data RAM of 240x320x18 bits

  • 240x320x18=1382400 bits

@+

Zoroastre.

zoroastre:
C'est sur que çà fait du lourd.
Mais je ne vois pas d'autres options pour obtenir des images sur un afficheur sans support sd. Il te faudra peut être sacrifier la couleur ou réduire la taille des images à des niveaux acceptables pour toi.

Passe en couleur 8bit :wink:

(Moi j'utilise paint.net -> image -> "save as" -> png -> couleur 8bit -> script python + lib Image -> .h)

Yep!

L'image d'origine était du jpeg, donc à priori en 8 bits.

script python + lib Image

Pièce jointe ou url, please ??? (Tu en as trop dit :wink: )

Sur l'ancien forum, il existait un script en Lua. Pas moyen de remettre la main dessus :blush:

@+

Zoroastre.

zoroastre:
dixit ST7781R datasheet : Display data can be stored in the on-chip display data RAM of 240x320x18 bits

zoroastre:
Tu exploites l'arduino pour stocker tes images ou l'afficheur ???

Pour l'instant, rien du tout! Je me posais simplement la question de savoir s'il était possible de stocker l'image dans ma UNO.

zoroastre:
dixit ST7781R datasheet : Display data can be stored in the on-chip display data RAM of 240x320x18 bits

RAM, pas EEPROM... Donc il faut d'abord avoir l'image dans l'Arduino.

skywodd, mon Paint ne me propose pas de choisir le nombre de couleur!!! (Windows 7)
Par contre avec GIMP, j'ai pu passer de 24 à 16 bits en .bmp, et gagner 125ko en .bmp, par contre je ne gagne rien dans les autres formats.

Quand tu utilisais ton script Python, tu arrivais à des fichiers de quelle taille?

zoroastre:
L'image d'origine était du jpeg, donc à priori en 8 bits.

jpg par défaut c'est des couleurs sur 24bits.

zoroastre:
Pièce jointe ou url, please ??? (Tu en as trop dit :wink: )

Code python complet, avec support couleurs 8bits et 24bits (juste déplacer le #)

import Image
import sys
im = Image.open(sys.argv[1])
data = list(im.getdata())
output = open(sys.argv[1][:-3] + 'h', 'w')
output.write("const unsigned int _img_w = %d;\n" % im.size[0])
output.write("const unsigned int _img_h = %d;\n" % im.size[1])
output.write("PROGMEM prog_uchar _img_data[] = {\n")
i = 0
for pixel in data:
        #output.write("%d, %d, %d" % (pixel[0],pixel[1],pixel[2])) # couleurs 24bit 
        output.write("%d," % pixel) # couleurs 8bit
        if(i == 32):
                output.write("\n")
                i = 0
        else:
                i = i +1

output.write("0};\n")
output.close()

schizophrene:
skywodd, mon Paint ne me propose pas de choisir le nombre de couleur!!! (Windows 7)
Par contre avec GIMP, j'ai pu passer de 24 à 16 bits en .bmp, et gagner 125ko en .bmp, par contre je ne gagne rien dans les autres formats.

Moi j'utilise pas Gimp (j'ai photoshop alors Gimp :P) pour ce genre de truc j'utilise paint.net, simple et puissant, quand tu enregistre il te demande sous quelle niveau de couleur tu veut enregistrer.

schizophrene:
Quand tu utilisais ton script Python, tu arrivais à des fichiers de quelle taille?

taille = largeur * hauteur + 4 octets
Je te joint un fichier d'exemple fait à partir d'une image en couleur 8bits (principalement du n&b j'avais la flemme de trouver une autre image ;)).

test.h (62.6 KB)

en faisant des recherche sur le net concernant l'arduino je suis tombé sur qque chose d'interessant pour toi

regarde le site qui parle du soft processing ils me semble parlé beaucoup des image et de la vidéo peut etre y trouveras tu bonheur ...

poisson_dino:
en faisant des recherche sur le net concernant l'arduino je suis tombé sur qque chose d'interessant pour toi
regarde le site qui parle du soft processing ils me semble parlé beaucoup des image et de la vidéo peut etre y trouveras tu bonheur ...

C'est à moi que tu parle ou à schizophrene ?
Nan parce que processing t'inquiète je connais, l'ide arduino est codé avec (et plein de mes appli aussi), j'utilise python juste pour mes scripts vite fait :wink:

Salut les gars!

Processing ne me servira à rien dans ce cas là, mon Arduino ne sera pas relié au PC (projet de télécommande tactile universelle, si le coeur m'en dit).

Je pourrais à la limite l'utiliser pour envoyer l'image dans la RAM de l'écran, mais il me faudrait le faire à chaque fois...