Index du forum




Un petit coup de main... Vous pouvez nous aider à mettre ce site à jour: n'hésitez pas à me contacter !!!

* Connexion   * Inscription

* FAQ
Nous sommes actuellement le 01 Déc 2025, 20:42

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Conversion image ppm en CPC mode 0

Modérateur: poulette73



Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 8 message(s) ] 
  Aperçu avant impression Sujet précédent | Sujet suivant 
Auteur Message
reno57
 Sujet du message : Conversion image ppm en CPC mode 0
Message Publié : 28 Oct 2018, 15:37 
Hors-ligne

Inscription : 28 Oct 2018, 13:36
Message(s) : 4
Bonjour,

Je suis en train de developper un petit programme en langage LUA pour convertir une image .ppm en un fichier binaire identique a ce qui devrait être écrit dans la mémoire écran du cpc (en mode 0).

Pour chaque couple de pixel de l'image, j'arrive à générer en hexadécimal le numero de stylo à utiliser (ce que certain appelle aussi le numéro d'encre).
Le problème c'est que, un octet de la mémoire écran du CPC en mode 0, se crée en entremêlant les valeurs binaires des 2 numéros de stylo.

Je connais la manière dont sont combinés les deux valeurs de stylo pour constituer un octet de memoire (c'est bien décrit dans plusieurs articles sur CPCRulez).
Par contre, je ne vois pas comment coder le programme (en langage C ou LUA ou python mais pas ASM) qui, à partir des 2 valeurs de stylo va générer le chiffre binaire ou hexadecimal qui correspond à la valeur de l'octet à mettre dans la mémoire du CPC.

Auriez vous une suggestion à me faire ?


Haut
 Profil  
 
demoniakparadox
 Sujet du message : Re: Conversion image ppm en CPC mode 0
Message Publié : 29 Oct 2018, 17:16 
Hors-ligne
Rulezz
Rulezz

Inscription : 26 Août 2013, 11:55
Message(s) : 70
De mémoire il suffit de faire un truc du genre (en C)

mem_cpc[adresse] = pixel0 + ( pixel1 << 1 );

pixel0 et pixel1 étant les valeurs de couleur en mode 0 des pixels à allumer.


Haut
 Profil  
 
reno57
 Sujet du message : Re: Conversion image ppm en CPC mode 0
Message Publié : 29 Oct 2018, 19:11 
Hors-ligne

Inscription : 28 Oct 2018, 13:36
Message(s) : 4
Merci pour cette info, mais je ne vois pas en quoi un simple décalage de bit permettra de réaliser l'entrelacement de bits du mode 0 (sans mauvais jeux de mots).


Haut
 Profil  
 
marcel
 Sujet du message : Re: Conversion image ppm en CPC mode 0
Message Publié : 29 Oct 2018, 22:02 
Hors-ligne
Rulezzzz
Rulezzzz

Inscription : 26 Juil 2016, 13:06
Message(s) : 515
Localisation : Valence
Parce que c'est exactement ce qu'il faut faire (dans n'importe quel mode)

pour le mode 0 tu as 4 bits par pixel pour faire 16 couleurs et tu sais déjà que les bits sont entrelacés

donc tu te doutes qu'en les décalant dans un sens ou l'autre, tu passes du pixel de droite à celui de gauche et inversement :)


Haut
 Profil  
 
reno57
 Sujet du message : Re: Conversion image ppm en CPC mode 0
Message Publié : 29 Oct 2018, 23:29 
Hors-ligne

Inscription : 28 Oct 2018, 13:36
Message(s) : 4
Je pense que j'ai mal exprimé ma question. Je vais passer par un exemple.

Dans une image initiale (faite avec un logiciel actuel type PC MAC), j'ai, à un endroit, deux pixels qui se suivent horizontalement: un jaune (pixel de gauche) puis un rouge (pixel de droite).

Sur CPC la couleur jaune = 12 = 1100 (en binaire sur un demi octet) = La valeur A
Sur CPC la couleur rouge = 3 = 0011 (en binaire sur un demi octet) = La valeur B


Dans l'octet de la mémoire écran du CPC, pour voir un pixel jaune puis un rouge, il faudra écrire :
octet = 10100101 = La valeur C

Ma question est : Comment calculer la valeur C à partir des valeurs A et B ?

D'après ce que j'ai compris, selon vous, la valeur C = B + (A<<1) = 00000011 + 00011000 = 00011011
Ce qui est différent de C.

Est ce plus explicite ainsi ? Est ce que j'ai rien compris ?


Haut
 Profil  
 
demoniakparadox
 Sujet du message : Re: Conversion image ppm en CPC mode 0
Message Publié : 30 Oct 2018, 07:36 
Hors-ligne
Rulezz
Rulezz

Inscription : 26 Août 2013, 11:55
Message(s) : 70
Je pense qu'il te manque une étape alors : convertir la couleur CPC en octet de mémoire écran.
Exemple : un pixel de couleur 3 en mode 0, si il est placé à gauche, aura en mémoire la valeur 136 (#88 en Hexa), alors que si il est placé à droite, il aura la valeur 68 (#44 en Hexa).

Du coup le code devient :
Code :
mem_cpc[adresse] = ConvertPixelOctet(pixel0) + ( ConvertPixelOctet(pixel1) << 1 );


Haut
 Profil  
 
marcel
 Sujet du message : Re: Conversion image ppm en CPC mode 0
Message Publié : 30 Oct 2018, 07:40 
Hors-ligne
Rulezzzz
Rulezzzz

Inscription : 26 Juil 2016, 13:06
Message(s) : 515
Localisation : Valence
en mode 0 pour les pixels G3G2G1G0 / D3D2D1D0 l'octet est codé G0D0G2D2G1D1G3D3

codage similaire pour le mode 1 avec 4 pixels, les moins significatifs en premier

en C ça donne
Citer :
if (pix1&1) zepix+=128;if (pix1&2) zepix+=8;if (pix1&4) zepix+=32;if (pix1&8) zepix+=2;
if (pix2&1) zepix+=64;if (pix2&2) zepix+=4;if (pix2&4) zepix+=16;if (pix2&8) zepix+=1;


On en revient à ce qu'à écrit démoniak au départ, tu converti les deux pixels de la même façon et tu décales d'un bit :wink:

0 P0 0 P2 0 P1 0 P3 en mode 0
0 0 0 P0 0 0 0 P1 en mode 1
0 0 0 0 0 0 0 P0 en mode 2


Haut
 Profil  
 
reno57
 Sujet du message : Re: Conversion image ppm en CPC mode 0
Message Publié : 31 Oct 2018, 16:57 
Hors-ligne

Inscription : 28 Oct 2018, 13:36
Message(s) : 4
:D Merci c'est exactement ça qui me manquait. Effectuer la comparaison bit à bit et générer l'octet résultant.

Sujet clos.


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  Page 1 sur 1
 [ 8 message(s) ] 

Index du forum » Z80 Coding

Le fuseau horaire est UTC+1 heure


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 17 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit en français par Maël Soucaze.