1

j'aimerai afficher des images a des points donnes qui soit plus grands que des sprites
sur tiwiki j'ai trouve ca mais
http://www.tiwiki.org/BitmapPut
je comprend pas ça
const void * bitmap
et ça
const SCR_RECT * clip
ç1

2

3

Pegase :
j'aimerai afficher des images a des points donnes qui soit plus grands que des sprites
sur tiwiki j'ai trouve ca mais
http://www.tiwiki.org/BitmapPut
je comprend pas ça
const void * bitmap
et ça
const SCR_RECT * clip

Ce sont des pointeurs vers des structures (bitmap et rectangle respectivement). Ça veut dire que l'on doit passer à la fonction quelque chose du genre :

SCR_RECT r; /* un rectangle */

/* Je configure mon rectangle: ma zone d'écran est positioné à 0,0 et a une longueur de 160 et une hauteur de 100*/
r.x0 = 0;
r.y0 = 0;
r.x1 = 159;
r.y1 = 99;

char monBitmap [BITMAP_HDR_SIZE + LCD_WIDTH*LCD_HEIGHT/8]; /* directement copié collé de la doc, un buffer (zone mémoire) assez grande pour acceuillir une capture de l'écran */

BitmapGet (&r, monBitmap); /* copié collé de la doc, capture de l'écran le & veut dire adresse de ce qui est référé par la variable, donc l'adresse de mon rectangle */

BitmapPut (0, 0, monBitmap, &r, A_REPLACE); /* Copié collé encore une fois: affiche le bitmap en position 0,0 */


Pour plus de détail, la doc est assez précise. Entre autres, ces liens présente du code où est utilisé un SCR_RECT et un BITMAP: http://tigcc.ticalc.org/doc/graph.html#BitmapGet
http://tigcc.ticalc.org/doc/graph.html#SetCurClip
http://tigcc.ticalc.org/doc/graph.html#BITMAP
http://tigcc.ticalc.org/doc/graph.html#SCR_RECT

4

devrais pas y'avoir
r.x1 = 160;
r.y1 = 100;

??
et le code du bitmap je le met ou?(données binaire)
si je dois afficher un bitmap a (83,3) de [54,16]pxl
ç1

5

Le programme de TICT "shuffle" (un special effect) utilise BitmapPut/BitmapGet.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

6

Pegase :
devrais pas y'avoir
r.x1 = 160;
r.y1 = 100;

??

si je dois afficher un bitmap a (83,3) de [54,16]pxl

Oui, j'ai une erreur de copier-coller dans mon exemple. C'est 159 plutôt que 160 et 99 au lieu de 100, car il s'agit des coordonnées du point inférieur droit. Pour ton bitmap ce sera :

r.x0 = 83;
r.y0 = 3;
r.x1 = r.x0 + 54 - 1;
r.y1 = r.y0 + 16 - 1;

Pourquoi le -1 ? Pense à un carré de 1 de côté en position 0,0, sont coin inférieur est également 0,0. Le placer en 1,1 ferait un carré de 2 de côté.
Pegase :
et le code du bitmap je le met ou?(données binaire)


Tu dois capturer un BITMAP avec la fonction BitmapGet ou convertir un PIC en bitmap. Pour la deuxième option, j'ai déterré mon vieux code Moka (je crois que j'avais trouvé ça en lisant le readme de flib) :

	/**
	 * Converts a specified PIC file name to a bitmap.
	 * If the file string object risk to be used later, use a copy of the string object
     * instead of the original, the string being finalized before the method returns.
	 *
	 * @param file The PIC file name
	 * @return The converted bitmap or null in case of error.
	 */
	public native static BITMAP* bitmapFromVar(String file) {
		char *SymName = file->toVat_(file);//T'as besoin d'une 'chaîne TIOS' voir la doc, le truc toVat est une particularité de Moka
		BITMAP* bitmap;

		SYM_ENTRY *sym_entry = SymFindPtr (SymName, 0);

		if ((sym_entry) && (peek (HToESI (sym_entry->handle)) == PIC_TAG)) {
			bitmap = Graphics_cloneBitmap_BITMAP_p(HeapDeref (sym_entry->handle) + 2); /* Fait une copie du bitmap, pas nécessaire si tu ne modifies pas le bitmap */
		}

		free ( SymName - strlen(file->value) - 1) ; /* libération d'une string tios */

		file->finalize_(file);//Frees the memory allocated to the TIOS string Particularité de moka ignorer

		return bitmap;
	}

7

on peut pas definir un bitmap?
http://tigcc.ticalc.org/doc/graph.html#BITMAP par ex
ç1

8

Pegase :
on peut pas definir un bitmap?
http://tigcc.ticalc.org/doc/graph.html#BITMAP par ex

Tu peux, mais c'est du trouble. J'ai pas testé, mais on devrait pouvoir faire ça:

char monBitmap [BITMAP_HDR_SIZE + LCD_WIDTH*LCD_HEIGHT/8]; /* Allocation */

monBitmap.NumRows = 100;
monBitmap.NumCols = 160;


Après tu dessine pixel par pixel... Ex: mettre le pixel 0,0 à on:

monBitmap.Data[0] |= 0x80;


Normalement, on dessine sur un écran virtuel, puis on utilise BitmapGet pour obtenir le bitmap.

Regarde PortSet dans la doc pour cette dernière technique.

9

Si, on peut définir une BITMAP. Greg le fait dans SuperStart (fait pour TIFS, mais ça doit marcher avec TIGCC aussi, puisque son compilateur est plus moderne).
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

10

y'a pas moyen de faire comme pour les sprites
static unsigned long titre[] = {data..........}

pasque sinon je traduis mes bitmap en sprite et je me debrouille ainsi mais ça me semble pas la meilleure solution
ç1

11

Ben si : static BITMAP mon_bitmap = {10,20,{0xaf, ...}}
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

12

Sasume :
Ben si : static BITMAP mon_bitmap = {10,20,{0xaf, ...}}

Intéressant, je ne connaissait pas.

13

ok merci
ç1

14

maintenant pour la nouvelle version de mon prog ( possibilité d'echange entre rond et croix; ecran de depart; commence ou pas) il me faudrait savoir comment initialiser un tableau de 3*3 a 0 ss le redefinir et si possible en une ligne
ç1

15

et pour un pointeur sur un sprite aussi
ç1

16

./14> memset(mont_tableau,0,3*3*sizeof(*mon_tableau));
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

17

sizeof(**mon_tableau), plutôt tongue

Mais si ton tableau est défini pour avoir une taille fixe, memset(mont_tableau,0,sizeof(mon_tableau)) sera bcp plus simple et t'évitera ce genre d'erreur...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

18

resolu (memset(mon_tableau,0,18) vu que c des short)
ç1

19

Mais c'est bcp plus propre de passer par sizeof(mon_tableau) que d'écrire 18 directement, parce que le jour où tu voudras changer qq chose dans la déclaration de mon_tableau, tu risques d'oublier de modifier le memset en même temps...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

20

Mais c'est encore moins bien que mon post ./16 neutral
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

21

cross tongue

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

22

Moi, je dirais sizeof(short)*3*3 : Le plus explicite pour moi (oui, je préfère sizeof(type) à sizeof(var), la seule exception étant un buffer static passé à une fonction de strsafe.h)
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

23

Moi je préfère la non-duplication de constantes (ou de types lorsqu'on passe outre le système de typage, ce qui est le cas ici : il n'y a aucune vérification que le tableau est bien un tableau de short...)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

24

C'est vrai que ça a aussi des inconvénients. Mais au moins, je n'ai pas de confusion avec la taille d'un pointeur au lieu du tableau, par exemple...

Et puis, il y a aussi les #define/typedef qui peuvent résoudre certains problèmes...

PS: pour la non-duplication de constantes, quand on en duplique une, mieux vaut la dupliquer complètement (et c'est aussi plus lisible): char buf[ 80 ]; /*blablabla*/ buf[ 80-1 ] = '\0'; (le 80-1 est bien plus lisible et plus facile à remplacer que 79...)
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

25

re resolu
memset(morp,0,3*3*sizeof(morp));
dtfaçon mon prog personne n'en veut
ç1

26

Link :
PS: pour la non-duplication de constantes, quand on en duplique une, mieux vaut la dupliquer complètement (et c'est aussi plus lisible): char buf[ 80 ]; /*blablabla*/ buf[ 80-1 ] = '\0'; (le 80-1 est bien plus lisible et plus facile à remplacer que 79...)

sauf que dans ce cas précis, c'est moyennement utile, amha ça le devient si tu fais "char buf[BUF_SIZE]; /* blabla */ buf[BUF_SIZE - 1] = '\0';", et là il n'y avait pas moyen de faire autrement happy
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

27

Et : "memset(morp,0,sizeof(morp)*sizeof(**morp));" ?
avatar

28

j'ai decide de faire le link maintenant
il me faut un truc pour transferer 2 short a la fin du tour
et un truc pour qu'une calc se declare 0 et l'autre 1 tout au debut
>>Thepro ce que j'ai deja me conviens
ç1

29

30

desolé j'ai fouille la rubrique ds ts les sens, resultat: soit ton topic n'est pas dans la rubrique C soit tu l'a pas cree
si thibaut s'apelle tjrs thibaut je vais le mp
ç1