CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[GBA/C] Problème affichage d'image.

lord_kalipsy
lord_kalipsy
Niveau 10
03 mars 2005 à 04:02:06

Salut,

J´ai commencé réçament à m´interressé à la prog sur GBA et en lisant des tutos, j´ai esseyé mettre en pratique en pratique ce que j´ai appris.

J´essais d´afficher une image de 240*160 en MODE_3. J´ai converti un . bmp de 256 en un header ( j´aime pas faire directement en binaire. ) SANS palette. AU moment ou j´affiche l´image avec :

for(y = 0; y < 160; y++) / /screen height
{
for(x = 0; x < 240; x++) / /screen width
{
VideoBuffer [y*240+x] = k2test[y*240+x]; //load image data into
} //memory pixel by pixel
}

l´image est affiché, mais en " décallé". C´est dificile à expliqué, disont qu´elle est cassé en morceau et que le coin surpérieur se trouve en haut . .. :S

Si vous avez une idée de ou peux venir mon prob, merci de m´éclairer :) ( J´ai utilisé bimbo et bmp2c pour tester, toujours avec les même prob. )

Merci d´avance,

Psy³

Ps : J´ai posté mon code sur un wall ici : http://rafb.net/paste/results/xjZsCT80.html

Ps 2 : Je cherche un bon outil pour transformer mes images ( surtout des bmp ) en . h si vous avez des sugestions . ..

gollumkawder
gollumkawder
Niveau 10
03 mars 2005 à 08:36:32

Jecomprends pas la scene amateur gba est tout de meme assez developpée, tu devrais trouver des tools pour ce genre d´opération, tu as bien sur cherché du coté de gbadev ou dans le style ?

LGV
LGV
Niveau 28
03 mars 2005 à 10:12:53

n´y aurait-il pas un problement de pitch qqcq, qui ferait que le format interne de ta surface ne soit pas exactement celui de ton image ? :-?

au passage, si tu cherces a blitter " betement", cherche un equivalent ASM GBA pour un " REP MOVS".
Si tu veux rester en " per pixel", essaye un truc genre ( en semi-pseudo-code approximatif...) :

bidule *src = myPicture;
bidule *dst = vram;
for ( int j = 0; j < height; ++j)
{
for ( int i = 0; i < width; ++i, ++src, ++dst)
{

  • dst = *src;

}
}

c´est predictif, pas de test pour le cache, ca genere de l´adressage base uniquement, etc. Plus mieux :)

Lapintade
Lapintade
Niveau 30
03 mars 2005 à 10:28:15

Je pense que c´est simplement un probleme de mauvaise utilisation de l´outil de conversion. A tu deja converti des images avant ? as tu fait un test avec une image simple ( un carré blanc dans un coin) et regarder ce que donne ton fichier . h ?
Il existe une multitude de programmes de conversion et tous ont leur difference.

Jecomprends pas la scene amateur gba
est tout de meme assez developpée

Ben c´est tellement simple de convertir une image en raw que y a pas d´outil evolués pour faire ca.

kufa
kufa
Niveau 9
03 mars 2005 à 10:53:09

Le code a l air correct..
Va voir sur gbadev, mais bon, je croyais que tout le monde utilisais le mode 4 ( :
Peut etre que tout simplement cela viens de ton image..

lord_kalipsy
lord_kalipsy
Niveau 10
03 mars 2005 à 11:03:51

gollumkawder -> Ouais, c´est justement là que j´ai pris un truc pour transformer une image en . bmp

LGV -> Okayz merci :) Mais j´essais de faire fonctionner mon truc avant de penserr à l´optim :-)))

lapintade -> J´vais esseyé

kufa -> Bah en fait, je voulais tester un truc alors avant de commencer le mode 4 . ..

Merci à tous :)

lord_kalipsy
lord_kalipsy
Niveau 10
03 mars 2005 à 16:15:48

J´ai retesté, et je crois que c´est mon tableau qui est mauvais . .. J´ai esseyé :

VideoBuffer [0] = k2test[0]; / /Donne du noir, alors que ça devrait être jaune.

VideoBuffer [y*240+x] = 0x7FFF; / / La valeur 0 du tableau . .. et là ça donne jaune :)

Étrange . ..

lord_kalipsy
lord_kalipsy
Niveau 10
03 mars 2005 à 16:29:25

Arf pas jaune, blanc en fait :-)))

gollumkawder
gollumkawder
Niveau 10
03 mars 2005 à 16:40:12

? Kali il voit les couleurs différentes en fonction de l´heure ?
. ..diabolique ça..

lord_kalipsy
lord_kalipsy
Niveau 10
03 mars 2005 à 17:11:33

Roooooh je vien de trouver la solution.

J´ai oublier de mettre l´attribut " const" . .. C´est fou ce que cela change . .. Je croyais que ça empeichais seulement de modifier la source . .. SI quelqu´un peux m´expliquer :)

gollumkawder
Posté le 03 mars 2005 à 16:40:12
? Kali il voit les couleurs différentes en fonction de l´heure ?
. . .diabolique ça..

--> Bah tu sais, la tourbe et la grève ont gravement affecté mon cerveau.

gollumkawder
gollumkawder
Niveau 10
03 mars 2005 à 17:17:06

mdr la tourbe, t´habites dans un marais ? Hm...

Sinon le const est trèès important :p

lord_kalipsy
lord_kalipsy
Niveau 10
03 mars 2005 à 17:44:54

gollumkawder
Posté le 03 mars 2005 à 17:17:06
mdr la tourbe, t´habites dans un marais ? Hm...

--> Bah oui comme tout le monde :)

Sinon le const est trèès important :p

--> Tu confirme mon inquiètude . .. :-p

Tien en passant, quelqu´un a une idée d´un gewnre d´algo pour transformer un RGB normal ( 24 bits ) en RGB16 ( un pixel sans palette sur 2 octet, utilisé plus haut ) ?

Mici :)

Vengeur41
Vengeur41
Niveau 10
03 mars 2005 à 18:05:05

J´ai écrit une fonction pour l´affichage d´image sur GBA, si ca

Vengeur41
Vengeur41
Niveau 10
03 mars 2005 à 18:07:20

J´ai écrit une fonction pour l´affichage d´image sur GBA, si ca peut t´aider :

void drawImg(int x, int y, unsigned char *gfx)
{
int i,j;
for ( i=0;i<240;i++)
{
for(j=0;j<160;j++)
{
putPixel(x+i,y+j,gfx[j*240+i]);
}
}
}

Je te donne le putPixel pour mode4 ( qui n´est pas de moi) :
void putPixel(short x, short y, unsigned char c)
{
unsigned short temp;

temp = VideoBuffer[(y*240+x)>>1];

if ( x & 1)
{
temp = temp & 0x00FF;
temp = temp + ( c < < 8);
}
else
{
temp = temp & 0xFF00;
temp = temp + c;
}
VideoBuffer[(y*240+x)>>1]=temp;
}

DSL pour le ratage :)

DarkPaladin
DarkPaladin
Niveau 5
03 mars 2005 à 19:34:23

lord_kalipsy : enlève 3 bits de chaque ton et tu as ton 16 bits.

Excellent mode, le mode 3, dommage que le cpu de la gba est pas assez rapide pour le scroll au complet dans ce mode.

lord_kalipsy
lord_kalipsy
Niveau 10
03 mars 2005 à 19:41:16

Oui, mais disont que j´ai un ton de rouge : 0x4A0000 j´enlève les bits " forts" ou les bits " faible" ? ??

Merci Vengeur pour ton aide :)

( Si quelqu´un a une idée sur le pourquoi de l´importance du " const", je suis tout ouïe ^^ )

DarkPaladin
DarkPaladin
Niveau 5
03 mars 2005 à 19:45:50
  1. define RGB(R,G,B) ( (R > > 3) & 31) | ( (G < < 2) & ( 31 < < 5)) | ( ((B > > 3) & 31) < < 10)
DarkPaladin
DarkPaladin
Niveau 5
03 mars 2005 à 19:53:50

lord_kalipsy : affiche ton code source pour ton const.

lord_kalipsy
lord_kalipsy
Niveau 10
03 mars 2005 à 19:57:18
  1. include < gba.h>
  2. include " Avatar_Image.h"

extern const u16 Avatar_Image[];

/ //////////////// C code entry ( main())/////////////////////

int main()
{
u32 x,y;

SetMode(MODE_3 | BG2_ENABLE);

for ( y = 0 ; y < 148 ; y++ )
for ( x = 0 ; x < 160 ; x++ )
VideoBuffer[y*240+x] = Avatar_Image[y*160+x];

while(1){}
}

( Dans Avatar_Image.h j´ai seulement un tableau de pixel " const u16". )

Merci pour ta macro :)

DarkPaladin
DarkPaladin
Niveau 5
03 mars 2005 à 20:05:03

C´est normal pour ton const, puis qu´en utilisant const, l´image se trouve sur la rom et non sur la ram.

Et, j´imagine que tu as utilisé la ram interne de 32k et non l´externe(256k). En plus, ton image depasse la ram interne avec ses 47360 octets.

Pour ton affichage, je te conseil d´utiliser le DMA3 pour la copie qui reste plus rapide qu´une simple copie.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment