Couleurs étranges lors de l'extraction de sprites et fonds graphiques

9 sujets de 16 à 24 (sur un total de 24)

  • 1
  • 2
  • AmiDARK

    • Messages : 2972
    #281043

    voila…
    J’ai regardé un peu, elle est simplement en 24 bits réel ( 3 octets par pixel ) .. et donc gérer à la fois la lecture des 2 Words ( 4 octets ) et extraction des R, V, et B en tenant compte des inversions dans les mots ( PC .. )… + Flag pour inversion de l’image (haut/bas)

    Le résultat : 

     

    AmiDARK

    • Messages : 2972
    #281044

    Voila l’archive du prog en DarkBASIC Professional que j’ai réalisé ce soir : http://www.alcahest-quantique.fr/Amiga/AmigaTGA.zip

    Pour les autres fichiers il faudra changer les noms de fichiers que j’ai mis … J’ai eu la flemme (pour ce soir) de te mettre un sélecteur de fichiers .. Je le ferais peut-être demain soir …

    Le code source complet pour ceux qui voudraient y jeter un oeil, à titre éducationnel :

    Rem Project: OctetsSwitchers
    Rem Created: Thursday, March 02, 2017

    Rem ***** Main Source File *****

    Set Display Mode 1024, 768, 32
    Sync On : Sync Rate 60 : Sync On
    Set Cursor 0, 0

    ConvertFile( « house00 » )
    ConvertFile( « illu_evolution_01 » )
    ConvertFile( « loading » )
    ConvertFile( « N_birthday_0000 » )
    ConvertFile( « N_cactushit_0031 » )
    ConvertFile( « N_enter_0015 » )
    ConvertFile( « T_bark1_0000 » )
    ConvertFile( « W_clock_0000 » )

    End

    Function ConvertFile( Source$ )
    FileOpen$ = Source$ + « .tga »
    FileSave$ = Source$ + « _Switched.bmp »
    Open To Read 1, FileOpen$
    Make Memblock From File 1, 1
    Close File 1
    datatypecode = Switch16Bits( Memblock Word( 1, 2 ) ) AND 0xFF // 2 = Uncompressed RGB
    Width = Memblock Word( 1, 12 )
    Height = Memblock Word( 1, 14 )
    OriginalDepth = Memblock Word( 1, 16 ) AND 0xFF
    OriginalMode = Switch16Bits( Memblock Word( 1, 16 ) AND 0xFF00 )

    ImageMbcSize = 16 + ( Width * Height * 4 )
    Make Memblock 2, ImageMbcSize
    Write Memblock DWord 2, 0, Width
    Write Memblock DWord 2, 4, Height
    Write Memblock DWord 2, 8, 32

    For iYPos = 0 to Height – 1
    For iXPos = 0 to Width – 1
    Pixels = 0
    if OriginalDepth = 16
    // On lit le RGB16bits format 565
    Pixels = Memblock Word( 1, 18 + ( ( iYPos * ( Width * 2 ) ) + ( iXPos * 2 ) ) )
    If OriginalMode = 32 Then Pixels = ConvertPixels16To32( Pixels )
    // On lit le RGB16Bits format 4444
    If OriginalMode = 36 Then Pixels = ConvertPixels16RGBATo32ARGB( Pixels )
    Else
    if OriginalDepth = 24
    Pixels = ReadRGB24( 1, iXPos, iYPos, Width, Height )
    Endif
    Endif
    WriteImagePixel( 2, iXPos, iYPos, Pixels )
    Next iWidth
    Next iHeight

    Make Image From Memblock 2, 2
    Cls : Sync
    Paste Image 2, 0, 0
    Sync
    Save Image FileSave$, 2

    Delete Image 2
    Delete Memblock 2
    Delete Memblock 1
    EndFunction

    Function Switch16bits( mVariable )
    mHigh = mVariable And 0xFF00
    mLow = mVariable And 0x00FF
    mOutPut = ( mHigh / 256 ) + ( mLow * 256 )
    EndFunction mOutPut

    Function WriteImagePixel( Mbc, XPos, YPos, Pixels )
    if Memblock Exist( Mbc ) = 1
    Width = Memblock DWord( Mbc, 0 )
    Height = Memblock DWord( Mbc, 4 )
    fPos = ( YPos * Width * 4 ) + ( XPos * 4 ) + 16
    Write Memblock Dword Mbc, fPos, Pixels
    Endif
    EndFunction

    Function ConvertPixels16To32( iColor )
    iRed = iColor16Red( iColor ) * 8
    iGreen = iColor16Green( iColor ) * 4
    iBlue = icolor16Blue( iColor ) * 8
    iColor = ( iRed * 65536 ) + ( iGreen * 256 ) + iBlue
    EndFunction iColor

    Function iColor16Red( iColor )
    // iRed = ( iColor AND %111110000000000 ) / 1024
    iRed = ( iColor AND %1111100000000000 ) / 2048
    EndFunction iRed

    Function iColor16Green( iColor )
    // iGreen = ( iColor AND %1111100000 ) / 32
    iGreen = ( iColor AND %11111100000 ) / 32
    EndFunction iGreen

    Function iColor16Blue( iColor )
    // iBlue = iColor AND %11111
    iBlue = iColor AND %11111
    EndFunction iBlue

    Function ConvertPixels16RGBATo32ARGB( iColor )
    iAlpha = ( ( iColor AND %1111000000000000 ) / 8192 )
    iRed = ( ( iColor AND %111100000000 ) / 256 ) * 16
    iGreen = ( ( iColor AND %11110000 ) / 16 ) * 16
    iBlue = ( iColor AND %1111 ) * 16
    iColor2 = ( iAlpha * 16777216 ) + ( iRed * 65536 ) + ( iGreen * 256 ) + iBlue
    EndFunction iColor2

    Function ReadRGB24( mbc, XPos, YPos, iWidth, iHeight )
    // Le mode utilise le bit 5 pour définir le lower left corner au lieu du top
    YPos = ( iHeight – 1 ) – YPos // Inversion du Y pour
    iAddress = 18 + ( YPos * iWidth * 3 ) + ( XPos * 3 )
    // Si on lit dans une addresse paire
    iAddressP = ( iAddress AND 0xFFFFFFFE )
    iComp1 = Memblock Word( mbc, iAddressP )
    iComp2 = Memblock Word( mbc, iAddressP + 2 )
    if iAddress = iAddressP
    iRed = ( iComp1 and 0xFF )
    iGreen = ( iComp1 and 0xFF00 ) / 256
    iBlue = ( iComp2 and 0xFF )
    Else
    iRed = ( iComp1 and 0xFF00 ) / 256
    iGreen = ( iComp2 and 0xFF )
    iBlue = ( iComp2 and 0xFF00 ) / 256
    Endif
    iColor = ( iRed * 65536 ) + ( iGreen * 256 ) + iBlue
    EndFunction iColor

    mikedafunk

    • Messages : 4303
    #281049

    Bravo AmiDARK !

    J’ai un petit soucis de palette, je ne vois pas bien l’image 😉

    A1220/28 - A1230/50 - A1240/40 - A1260/64 - A500 - A500+Gotek - CD32 - A600 - MOS / Mac mini - Lubuntu / eeepc - http://mikedafunk.over-blog.org

    Anonyme

    • Messages : 4096
    #281050

    arf arf arf !

    bref, en tous cas bravo !

    AmiDARK

    • Messages : 2972
    #281074

    @Zeldus :
    Par contre j’ai supprimé les images de mon FTP … L’objectif était juste pour moi l’aspect « éducationnel ». Tu as toutes les informations pour pouvoir convertir le reste des images que tu voulais extraire.

    Sincèrement,

    Zeldus

    • Messages : 153
    #281080

    @AmiDARK

    Aucun souci, je regarde tout cela en détail ce lundi. En tout cas, toutes les images que tu as obtenues sont correctes et présentent le bon aspect. Bravo !

    Effectivement, même si l’éditeur Joowood a fait faillite  il y a 7 ans, les droits du jeu appartiennent désormais à la boîte qui a racheté l’éditeur à l’époque. Concernant le darkbasic professionnal, peux tu m’en dire un peu plus (du moins celui pour windows), ainsi que ses qualités et défauts  car je découvre un langage super complet, qui permet de faire du contrôle de bas niveau et ça m’a épaté ! Je vais essayé d’étudier tout cela de près.

    Dernier point, sais tu comment sélectionner la totalité des fichiers tga (genre si il y en a 500) d’un répertoire donné plutôt que de devoir entrer chaque fichier individuellement avec le code suivant ? Par avance, merci !

    ConvertFile( « house00 » )
    ConvertFile( « illu_evolution_01 » )
    ConvertFile( « loading » )
    ConvertFile( « N_birthday_0000 » )
    ConvertFile( « N_cactushit_0031 » )
    ConvertFile( « N_enter_0015 » )
    ConvertFile( « T_bark1_0000 » )
    ConvertFile( « W_clock_0000 » )

    Bon weekend,

    Pierre

     

     

    Zeldus

    • Messages : 153
    #281164

    J’ai essayé de progresser sur le sujet, seul Imagemagick semble capable de modifier les valeurs RGBA des fichiers et encore, ce n’est pas gagné ! Les développeurs confirment que par défaut, le TGA, c’est du RGBA5551, donc, tout ce qui est différent, ça va coincer, à moins de faire des manips avec un éditeur hexadécimal pour bidouiller, à priori, extraire le flux de données brut du fichier TGA avec l’éditeur hexadécimal.

    Sinon, j’ai regardé ton prog, très intéressant, je le compile en local sur mon PC, pas d’erreur critique, le prog se lance bien mais il ne produit aucun fichier switched.bmp en sortie… Et pourtant, les fichiers sources sont bien dans le répertoire, pas d’erreur, tout se passe bien…

    En tout cas, merci pour ton coup de main, tu avais déjà vu ces manips de formats graphiques par le passé ?

    Pierre

     

    AmiDARK

    • Messages : 2972
    #281173

    Salut,

    Tu as bien fait attention de mettre les noms de fichiers sans l’extension « .tga » ? Et que ces derniers sont bien nommés en .tga ?
    Ah oui, j’oubliai, que l’exe et les fichiers soient dans le même dossier (Selon ton Windows fait gaffe aux autorisations d’écriture (le mieux un truc genre « d:\conversion » ,serait plus simple je pense….)

    Après, il faut voir avec quelle version de DarkBASIC Professional tu travailles ? Je crois que l’install par défaut est en 5.5 et la dernière mise à jour officielle en 7.7 … Si ce n’est celle du Git (Open Source) qui est plus récente (et est celle que j’utilise car elle bénéficie de certaines améliorations de leur nouveau soft GameGuru)…
    Tu as testé le .Exe de l’archive que je t’ai partagé voire si avec les fichiers par défaut que tu avais partagé cela fonctionnait ?

    Sinon, concernant ce soucis, oui, cela m’était déjà arrivé auparavant d’être frotté à ce genre de détails :p

    AmiDARK

    • Messages : 2972
    #281181

    http://web.archive.org/web/20130622065652/http://www.thegamecreators.com/?m=view_product&id=2000

    Voila un lien sur le webarchive de l’époque où le produit était payant et pas encore Open Source …

    Cela te donnera peut-être quelques informations …
    Cela dit, les forumes *officiels* de TGC sont encore assez actifs concernant DarkBASIC Professional.

9 sujets de 16 à 24 (sur un total de 24)

  • 1
  • 2
  • Vous devez être connecté pour répondre à ce sujet.

Forums Communauté Le Bar Couleurs étranges lors de l'extraction de sprites et fonds graphiques

Do NOT follow this link or you will be banned from the site!