Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » Problèmes avec BitmapPut (14 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Nul Ecrit le: Dimanche 4 juillet 2004 à 17:14 Déconnecté(e)    Voir le profil de Nul Envoyer un email à Nul Envoyer un message privé à Nul  

Salut !

J'ai un petit problème dans un programme avec BitmapPut:

void _main(void)
{
SCR_RECT ecran = {{0, 0, 239, 127}};
unsigned char building_0[] = {0, 31, 0,24, // Image du plan gris clair
0x00,0x0F,0xA0,0x00,0x07,0x88,0x00,0x09,0x08,0x01,0x08,0xAD,0x00,0xC0,0xBF,0x00,0x90,0xD7,0x00,0x60,0x1A,0x60,0x04,0xA0,0x03,0xD7,0x0C,0x6B,0xB4,0x26,0xAC,0x58,0x34,0x64,0x49,0x1C,0x86,0x08,0x40,0x60,0x81,0x14,0x68,0xD8,0xBC,0x59,0x12,0x28,0x19,0x88,0x14,0x1B,0x37,0xB8,0x01,0x04,0x6C,0x15,0xC0,0xDC,0x22,0x54,0xCC,0x05,0x34,0x68,0x23,0x44,0xF4,0x06,0xB6,0x54,0x20,0x44,0xF0,0x06,0xF7,0x80,0x03,0xE6,0x80,0x26,0xF6,0x00,0x37,0xF4,0x00,0x1E,0x80,0x00,0x00,0x00,0x00};

unsigned char building_1[] = {0, 31, 0, 24, // Image du plan gris foncé
0x00,0x30,0x50,0x00,0x7A,0x6E,0x00,0xF0,0xF6,0x01,0xF0,0x52,0x00,0xF0,0x40,0x04,0xF3,0x28,0x1F,0xFF,0xE5,0x7F,0xFB,0x5F,0x7C,0x2C,0xF2,0xF4,0x49,0xD8,0xFB,0x9F,0xCA,0xFB,0xBF,0xE0,0xF9,0xFF,0xBC,0xFF,0x7F,0xEC,0xFF,0x3F,0xE0,0x7E,0xFD,0xD4,0x7E,0x7F,0xE8,0x3C,0xD9,0x44,0x3E,0xFB,0x90,0x3E,0x3F,0x00,0x3D,0xAB,0x30,0x3E,0x5B,0x94,0xFC,0xBB,0x24,0xFD,0x19,0xA4,0xFF,0xBB,0x24,0xFD,0x18,0xF0,0xFC,0x99,0xE0,0xFD,0x19,0x80,0xFD,0x9A,0x00,0x75,0xE0,0x00,0x04,0x00,0x00};

unsigned char * vscreen_0 = NULL;
unsigned char * vscreen_1 = NULL;
vscreen_0 = malloc(LCD_SIZE);
vscreen_1 = malloc(LCD_SIZE);
memset(vscreen_0, 0, LCD_SIZE);
memset(vscreen_1, 0, LCD_SIZE);

ClrScr();
if(!GrayOn())
return;

PortSet(vscreen_0, 239, 127);
BitmapPut(0, 80, building_0, &ecran, 2);
PortSet(vscreen_1, 239, 127);
BitmapPut(0, 80, building_1, &ecran, 2);
memcpy(GrayGetPlane(LIGHT_PLANE), vscreen_0+30*28, LCD_SIZE-30*28);
memcpy(GrayGetPlane(DARK_PLANE), vscreen_1+30*28, LCD_SIZE-30*28);
ngetchx();
GrayOff();
}

Le problème est que l'image de mon bulding est coupée alors qu'elle ne devrait pas!

Pourquoi ?

Merci pour votre aide.

[EDIT par Kevin Kofler: Désactivé les smileys.]
-Edité le Vendredi 9 juillet 2004 à 16:07 par Kevin Kofler-
"De tous les animaux, l'homme a le plus de pente,
A se porter dedans l'excès."

Jean de la Fontaine
    
./Post n°1   Marquer comme non lu.
Benjy Ecrit le: Dimanche 4 juillet 2004 à 18:09 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


deja c'est SCR_RECT ecran = {{0, 0, 240, 128}}; et sinon je voit pas pourquoi elle peut etre coupe
Le langage C y'a pas mieux!!!
    
./Post n°2   Marquer comme non lu.
Sasume Ecrit le: Lundi 5 juillet 2004 à 02:11 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Je pense qu'il a correctement défini les limites de clipping (flemme de vérifier).

Nul> Tu es sûr que ton sprite est correct ?
Pour une image de cette taille, je te conseille d'utiliser un Sprite de 32 pixels de largeur (reporte toi à la fonction Sprite32 dans l'aide de TIGCCLIB).
Tu ne libères pas les blocs de mémoire alloués ! C'est une faute grave.
Tu peux allouer tes écrans avec calloc qui les remplit automatiquement de 0.
Utilise les macros A_MODE pour préciser le mode d'affichage que tu utilises, sinon c'est illisible. De mémoire, il me semble que le mode 2 est le mode A_XOR.
Quel est le problème exactement ?
Qu'est-ce qui est coupé ?
As-tu correctement défini les dimensions de ton bitmap ?
    
./Post n°3   Marquer comme non lu.
Benjy Ecrit le: Lundi 5 juillet 2004 à 07:36 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


oui c'est ce que je pensai utiliser sprite 32 mais j'etai pas sur
Le langage C y'a pas mieux!!!
    
./Post n°4   Marquer comme non lu.
Lionel Debroux Ecrit le: Lundi 5 juillet 2004 à 10:04 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

cerede2000, tu as tort, c'est bien {{0,0,239,127}}. L'écran fait 240x128 pixels au total (240 = 239 - 0 + 1); la ligne 128 est en-dehors de l'écran, et la colonne 240 correspond à la colonne 0, une ligne plus loin.
Lionel Debroux - membre de TICT.
    
./Post n°5   Marquer comme non lu.
Benjy Ecrit le: Lundi 5 juillet 2004 à 10:23 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


ah bon pourtant pour une TI89 c'est 160 100
Le langage C y'a pas mieux!!!
    
./Post n°6   Marquer comme non lu.
Lionel Debroux Ecrit le: Lundi 5 juillet 2004 à 10:32 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

La 89 a un écran 240x128 (en mémoire) dont seulement 160x100 sont visibles sur l'écran réel. Voir FL_getHardwareParmBlock.
Lionel Debroux - membre de TICT.
    
./Post n°7   Marquer comme non lu.
Nul Ecrit le: Lundi 5 juillet 2004 à 10:45 Déconnecté(e)    Voir le profil de Nul Envoyer un email à Nul Envoyer un message privé à Nul  

C'est vrai, j'ai oublié de libérer les blocs de mémoire mais c'est en recopiant le message que je me suis trompé donc rien de grave. Mon sprite est correctement défini car quand je l'affiche plus haut (aux coordonées 0, 0, par exemple) il n'y a aucun problème.
Je me suis assez mal exprimé, excusez-moi: en fait, pour une 89, j'affiche mon sprite à l'ordonnée 80 pour qu'elle soit visible seulement en partie dans un premier temps; puis je scrolle l'écran de 28 lignes vers le bas pour afficher mon sprite entièrement et c'est à ce moment-là que l'image est coupée, ce qui est anormal.

Voilà, j'espère que j'ai été plus clair :)
"De tous les animaux, l'homme a le plus de pente,
A se porter dedans l'excès."

Jean de la Fontaine
    
./Post n°8   Marquer comme non lu.
Sasume Ecrit le: Lundi 5 juillet 2004 à 10:53 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Comment tu scrolles ?
    
./Post n°9   Marquer comme non lu.
Nul Ecrit le: Lundi 5 juillet 2004 à 10:58 Déconnecté(e)    Voir le profil de Nul Envoyer un email à Nul Envoyer un message privé à Nul  

Avec memcpy:
memcpy(GrayGetPlane(LIGHT_PLANE), vscreen_0+30*28, LCD_SIZE-30*28););
memcpy(GrayGetPlane(DARK_PLANE), vscreen_1+30*28, LCD_SIZE-30*28););
(Pénible ces smileys ...)

Yipiiie !
Ca marche avec Sprite32 !
Mais ça ne me dit toujours pas pourquoi BitmapPut ne fonctionne pas ...
-Edité le Lundi 5 juillet 2004 à 11:23 par geogeo-
"De tous les animaux, l'homme a le plus de pente,
A se porter dedans l'excès."

Jean de la Fontaine
    
./Post n°10   Marquer comme non lu.
Lionel Debroux Ecrit le: Lundi 5 juillet 2004 à 11:20 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Il y a une checkbox juste en-dessus du bouton "Ajouter ma réponse"...
Oui, c'est peut-être un problème avec le scrolling.
Lionel Debroux - membre de TICT.
    
./Post n°11   Marquer comme non lu.
Nul Ecrit le: Lundi 5 juillet 2004 à 11:32 Déconnecté(e)    Voir le profil de Nul Envoyer un email à Nul Envoyer un message privé à Nul  

Merci à geogeo pour les smileys, j'avais pas vu ... dsl
"De tous les animaux, l'homme a le plus de pente,
A se porter dedans l'excès."

Jean de la Fontaine
    
./Post n°12   Marquer comme non lu.
Kevin Kofler Ecrit le: Vendredi 9 juillet 2004 à 16:08 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Benjy :
ah bon pourtant pour une TI89 c'est 160 100

Non plus, c'est 159,99 ou alors 239,127 aussi.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°13   Marquer comme non lu.
Kevin Kofler Ecrit le: Vendredi 9 juillet 2004 à 16:09 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Nul :
Avec memcpy:
memcpy(GrayGetPlane(LIGHT_PLANE), vscreen_0+30*28, LCD_SIZE-30*28););
memcpy(GrayGetPlane(DARK_PLANE), vscreen_1+30*28, LCD_SIZE-30*28););

Et ben faut pas, il faut utiliser memmove ici!
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°14   Marquer comme non lu.
Lionel Debroux Ecrit le: Samedi 10 juillet 2004 à 11:31 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

> Et ben faut pas, il faut utiliser memmove ici!
Ou en faire un à la main si celui d'AMS n'est pas assez rapide. Il transfère par words et utilise des boucles étroites...
Lionel Debroux - membre de TICT.
    
  :: Index » Forum Ti68K » Programmation C » Problèmes avec BitmapPut (14 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 61.46ms avec 18 requetes