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

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

  • 1
  • 2
  • AmiDARK

      #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

        #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

          #281049

          Bravo AmiDARK !

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

          Anonyme

            #281050

            arf arf arf !

            bref, en tous cas bravo !

            AmiDARK

              #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

                #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

                  #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

                    #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

                      #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

                    Amiga Impact