Amstrad Plus Forum Index

Amstrad Plus
Découverte de la gamme Old et Plus des Cpc d'Amstrad.

 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

png ou jpeg vers scr/ sprite / overscan ou i2

 
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> Affichage video
Previous topic :: Next topic  
Author Message
Sid


Offline

Joined: 01 May 2018
Posts: 153
Masculin
Point(s): 120
Moyenne de points: 0.78

PostPosted: Fri 1 Mar - 23:33 (2019)    Post subject: png ou jpeg vers scr/ sprite / overscan ou i2 Reply with quote

bonjour à tous,
je sais qu'il existe convimgcpc de Demoniak qui est très bien mais je suis en train d'écrire un programme pour transférer des images vers un écran ocp, sprite ou un écran d'overscan.


Roudoudou et Siko m'ont déjà corrigé sur le calcul des pixels mais la je reste bloquer sur l'organisation mémoire de l'écran du CPC.
Une image png ou jpeg est organisé  de la même manière x lignes de y colonnes (de manière linéaire).


pour la conversion en écran CPC mode 0 voici l'ago que j'ai écrit : 


offset := 8
    for j := 0; j < offset; j++ {
        for y := in.Bounds().Min.Y + j; y < in.Bounds().Max.Y; y += offset {
            for x := 0; x < in.Bounds().Max.X; x += 2 {
récupération des indices de la palette et conversion
}
}
}
oui mais voila j'obtiens pas le résultat que j'espérais. 
comme référence il y a les documentations de Démoniak ou CPCWiki, mais tous tu calcules de l'adresse par rapport à la ligne.
voici une image que j'aimerai obtenir : 



voila ce que j'obtiens : 



il y a bien un décalage mais je n'arrive pas à comprendre de combien.


Back to top
Publicité






PostPosted: Fri 1 Mar - 23:33 (2019)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Fri 1 Mar - 23:58 (2019)    Post subject: png ou jpeg vers scr/ sprite / overscan ou i2 Reply with quote

J’ai l’impression que tu as compris ton bug. Dis nous en plus.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Sid


Offline

Joined: 01 May 2018
Posts: 153
Masculin
Point(s): 120
Moyenne de points: 0.78

PostPosted: Mon 4 Mar - 16:37 (2019)    Post subject: png ou jpeg vers scr/ sprite / overscan ou i2 Reply with quote

Je réponds à mon propre problème.
Donc l'idée de base est de convertir une image jpeg/png en fichier écran CPC voir des sprites.
Ce qui merdouillait était bien de calcul d'adresse de l'écran CPC et fait que je travaillais avec un flux de byte (Smile).
Changement de tactique avec ce code je peux transformer les fichiers en mode 0 :





bw := make([]byte, 0x4000)
    if overscan {
        bw = make([]byte, 0x8000)
    }
    firmwareColorUsed := make(map[int]int, 0)
    fmt.Fprintf(os.Stdout, "Informations palette (%d) for image (%d,%d)\n", len(p), in.Bounds().Max.X, in.Bounds().Max.Y)
    fmt.Println(in.Bounds())


    for y := in.Bounds().Min.Y; y < in.Bounds().Max.Y; y++ {
        for x := in.Bounds().Min.X; x < in.Bounds().Max.X; x += 2 {


            c1 := in.At(x, y)
            pp1, err := PalettePosition(c1, p)
            if err != nil {
                fmt.Fprintf(os.Stderr, "%v pixel position(%d,%d) not found in palette\n", c1, x, y)
                pp1 = 0
            }
            firmwareColorUsed[pp1]++
            //fmt.Fprintf(os.Stdout, "(%d,%d), %v, position palette %d\n", x, y+j, c1, pp1)
            c2 := in.At(x+1, y)
            pp2, err := PalettePosition(c2, p)
            if err != nil {
                fmt.Fprintf(os.Stderr, "%v pixel position(%d,%d) not found in palette\n", c2, x+1, y)
                pp2 = 0
            }


            firmwareColorUsed[pp2]++


            //fmt.Fprintf(os.Stdout, "(%d,%d), %v, position palette %d\n", x+1, y+j, c1, pp2)
            var pixel byte
            //fmt.Fprintf(os.Stderr,"1Sad%.8b)2Sad%.8b)4Sad%.8b)8Sad%.8b)\n",1,2,4,8)
            //fmt.Fprintf(os.Stderr,"uint8(pp1)&1:%.8b\n",uint8(pp1)&1)
            if uint8(pp1)&1 == 1 {
                pixel += 128
            }
            //fmt.Fprintf(os.Stderr,"uint8(pp1)&2:%.8b\n",uint8(pp1)&2)
            if uint8(pp1)&2 == 2 {
                pixel += 8
            }
            //fmt.Fprintf(os.Stderr,"uint8(pp1)&4:%.8b\n",uint8(pp1)&4)
            if uint8(pp1)&4 == 4 {
                pixel += 32
            }
            //fmt.Fprintf(os.Stderr,"uint8(pp1)&8:%.8b\n",uint8(pp1)&8)
            if uint8(pp1)&8 == 8 {
                pixel += 2
            }
            if uint8(pp2)&1 == 1 {
                pixel += 64
            }
            if uint8(pp2)&2 == 2 {
                pixel += 4
            }
            if uint8(pp2)&4 == 4 {
                pixel += 16
            }
            if uint8(pp2)&8 == 8 {
                pixel++
            }
            //fmt.Fprintf(os.Stdout, "x(%d), y(%d), pp1(%.8b), pp2(%.8b) pixel(%.8b)(%d)(&%.2x)\n", x, y, pp1, pp2, pixel, pixel, pixel)
            // MACRO PIXM0 COL2,COL1
            // ({COL1}&8)/8 | (({COL1}&4)*4) | (({COL1}&2)*2) | (({COL1}&1)*64) | (({COL2}&8)/4) | (({COL2}&4)*8) | (({COL2}&2)*4) | (({COL2}&1)*128)
            //  MEND
            if overscan {
                bw[(0x800*(y%8))+(0x60*(y/8))+((x+1)/2)] = pixel
            } else {
                bw[(0x800*(y%8))+(0x50*(y/8))+((x+1)/2)] = pixel
            }
            //bw = append(bw, pixel)
        }


    }


Back to top
Sid


Offline

Joined: 01 May 2018
Posts: 153
Masculin
Point(s): 120
Moyenne de points: 0.78

PostPosted: Mon 4 Mar - 16:56 (2019)    Post subject: png ou jpeg vers scr/ sprite / overscan ou i2 Reply with quote

image de départ :




en mode O:




en mode 1:



en mode 2:







donc reste à faire :

- tester le mode overscan

- implémenter et tester le mode sprite
- export de la palette ocp
- export en ascii voir orgams. (dés que je connais les tokens utilisés dans les fichiers orgams.)


Back to top
Ast
Administrateur

Offline

Joined: 05 Sep 2014
Posts: 2,977
Masculin
Point(s): 390
Moyenne de points: 0.13

PostPosted: Mon 4 Mar - 20:11 (2019)    Post subject: png ou jpeg vers scr/ sprite / overscan ou i2 Reply with quote

Sid wrote:
image de départ :




en mode O:




en mode 1:



en mode 2:







donc reste à faire :

- tester le mode overscan

- implémenter et tester le mode sprite
- export de la palette ocp
- export en ascii voir orgams. (dés que je connais les tokens utilisés dans les fichiers orgams.)




Mais dis moi ça m'a l'air pas mal du tout ton truc!


Concernant l'export en ascii vers OrgAms, il me semble que je t'avais fourni un code Sprite to Ascii pour cela!
Pour les Tokens, je pense que ça devrait être résolu now.
_________________
Ast/iMP4CT

"Par le pouvoir du crâne ancestral...."


Back to top
Display posts from previous:   
Post new topic   Reply to topic    Amstrad Plus Forum Index -> Programmation Cpc -> Affichage video All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  

Index | Administration Panel | Create a forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group