Quel est le codage mèmoire d'un ecran EGA ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Quel est le codage mèmoire d'un ecran EGA ?

Message par djes »

Pareil, pour moi ça fonctionne bien (PB 5.2b13 x86)... Seule différence entre les deux images sauvegardées : le PNG a le fond transparent et le bmp le fond noir.
Avatar de l’utilisateur
Eric
Messages : 79
Inscription : dim. 08/juil./2007 21:38
Localisation : Nord
Contact :

Re: Quel est le codage mèmoire d'un ecran EGA ?

Message par Eric »

j'utilise Purebasic 5.20 LTS beta 15.

Ce qui n'est pas logique c'est que je compile avec l'option DirectX11 et l'image obtenue a les bonnes couleurs.
Mais si j'enlève cette option, l'image n'a plus les mêmes couleurs.
Donc, l'image obtenue avec une copie d'écran et chargée dans PAINT est correcte.

C'est très perturbant.

les images se trouvent sur Google Drive.
Avatar de l’utilisateur
Eric
Messages : 79
Inscription : dim. 08/juil./2007 21:38
Localisation : Nord
Contact :

Re: Quel est le codage mèmoire d'un ecran EGA ?

Message par Eric »

Image


Image

Image

Image
Dernière modification par Eric le ven. 06/sept./2013 9:17, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Quel est le codage mèmoire d'un ecran EGA ?

Message par djes »

Ptet une histoire de sens RGB/BGR, ou de lecture des DATAs?! Essaye avec ce code :

Code : Tout sélectionner

DataSection
   Image1:
   IncludeBinary "65801.IM1"
   Image2:
   IncludeBinary "65801.IM2"
   Image3: 
   
   Table_Couleurs:
   Data.i $000000,$0000aa,$00aa00,$00aaaa,$aa0000,$aa00aa,$aaaa00,$aaaaaa
   Data.i $000055,$0000ff,$00aa55,$00aaff,$aa0055,$aa00ff,$aaaa55,$aaaaff
   Data.i $005500,$0055aa,$00ff00,$00ffaa,$aa5500,$aa55aa,$aaff00,$aaffaa
   Data.i $005555,$0055ff,$00ff55,$00ffff,$aa5555,$aa55ff,$aaff55,$aaffff
   Data.i $550000,$5500aa,$55aa00,$55aaaa,$ff0000,$ff00aa,$ffaa00,$ffaaaa
   Data.i $550055,$5500ff,$55aa55,$55aaff,$ff0055,$ff00ff,$ffaa55,$ffaaff
   Data.i $555500,$5555aa,$55ff00,$55ffaa,$ff5500,$ff55aa,$ffff00,$ffffaa
   Data.i $555555,$5555ff,$55ff55,$55ffff,$ff5555,$ff55ff,$ffff55,$ffffff
   ; les index des 16 couleur par défaut
   Index_Couleurs:
   Data.b 0,1,2,3,4,5,20,7,56,57,58,59,60,61,62,63
EndDataSection
Dim Couleur.l(15)
Dim Palette.i(64) ; Valeurs RVB

Restore Table_Couleurs
For i=0 To 63
   Read.s Palette(i)
   
Next i

Restore Index_Couleurs
For i=0 To 15
   Read.b Index
   Couleur(i)=Palette(Index)
Next i

Enumeration
   #Image_synoptique
   #Sprite_synoptique
EndEnumeration

InitKeyboard()
;KeyboardMode(#PB_Keyboard_International)
InitSprite()
OpenScreen(640,480,32,"Synoptique Images")

UsePNGImageEncoder()
UseJPEGImageEncoder()
ClearScreen($aaaaaa)
x=0:y=0
CreateImage(#Image_synoptique,640,350,32)
CreateSprite(#Sprite_synoptique,640,350,#PB_Sprite_AlphaBlending)
Dim Plane_set.u(4)
StartDrawing(ImageOutput(#Image_synoptique))
*Image=?Image1 + 10 ; je ne sais pas à quoi servent les 10 premiers octets...?
Repeat
   ; lecture de huit pixels par plan
   pos = y*320+(x/8)
   For i=0 To 3
      Plane_set(i)=PeekA(*Image+80*i + pos)
   Next i
   ; recherche de la couleur de chaque pixel
   For i=0 To 7
      n1=(Plane_set(0)>>i) & %1
      n2=(Plane_set(1)>>i) & %1
      n3=(Plane_set(2)>>i) & %1
      n4=(Plane_set(3)>>i) & %1
      Index=(n1<<3 | n2<<2 | n3<<1 | n4)
      ;Index=(n4<<3 | n3<<2 | n2<<1 | n1)
      
      Plot(x+(7-i),y,Couleur(Index))
   Next i
   x+8
   If x>639
      x=0
      y+1
   EndIf
Until y>199
*Image=?Image2 + 10
x = 0
y = 0
Repeat
   ; lecture de huit pixels par plan
   pos = y*320+(x/8)
   For i=0 To 3
      Plane_set(i)=PeekA(*Image+80*i + pos)
   Next i
   ; recherche de la couleur de chaque pixel
   For i=0 To 7
      n1=(Plane_set(0)>>i) & %1
      n2=(Plane_set(1)>>i) & %1
      n3=(Plane_set(2)>>i) & %1
      n4=(Plane_set(3)>>i) & %1
      
      Index=(n1<<3 | n2<<2 | n3<<1 | n4)
      ;Index=(n4<<3 | n3<<2 | n2<<1 | n1)
      Plot(x+(7-i),y+200,Couleur(Index))
   Next i
   x+8
   If x>639
      x=0
      y+1
   EndIf
Until y>149

StopDrawing()
ClearScreen(0)
   StartDrawing(ScreenOutput())
   DrawingMode(#PB_2DDrawing_Default )
   DrawImage(ImageID(#Image_synoptique),0,0)
   StopDrawing()
FlipBuffers()
Repeat
   ExamineKeyboard()
   ClearScreen(0)
   StartDrawing(ScreenOutput())
   DrawingMode(#PB_2DDrawing_Default )
   DrawImage(ImageID(#Image_synoptique),0,0)
   StopDrawing()
   
   
   If KeyboardPushed(#PB_Key_S)
      GrabSprite(#Sprite_synoptique,0,0,640,350,#PB_Sprite_AlphaBlending)
      SaveSprite(#Sprite_synoptique,GetCurrentDirectory()+"Synoptique.png",#PB_ImagePlugin_PNG)
      SaveImage(#Image_synoptique,GetCurrentDirectory()+"Synoptique.bmp",#PB_ImagePlugin_BMP)
   EndIf
   FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
FreeImage(#Image_synoptique)
FreeSprite(#Sprite_synoptique)
End
Avatar de l’utilisateur
Eric
Messages : 79
Inscription : dim. 08/juil./2007 21:38
Localisation : Nord
Contact :

Re: Quel est le codage mèmoire d'un ecran EGA ?

Message par Eric »

j'avais essayé. Mais cela ne change rien au fait que l'image affichée est correcte mais celle qui est sauvée en bmp.
l'affichage n'est plus correct quand j'élimine option du compilateur et donc je reviens en DirectX9.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Quel est le codage mèmoire d'un ecran EGA ?

Message par djes »

Je sais qu'il y a souvent des bugs avec le BMP... Est-ce le cas ici ? (nous ne savons pas quelles sont les bonnes couleurs...)
Avatar de l’utilisateur
Eric
Messages : 79
Inscription : dim. 08/juil./2007 21:38
Localisation : Nord
Contact :

Re: Quel est le codage mèmoire d'un ecran EGA ?

Message par Eric »

Si si si. je travaille sur ces équipements tous les jours.

Les bonnes couleurs sont avec l'option du compilateur "DirectX11".

Le circuit de chauffage et de froid en "rouge"
Le circuit de vapeur en "Jaune"
Le circuit d'évacuation en "vert"
Le circuit des gaz en "Bleu ciel"
Le circuit de piège à -70°C en "mauve"
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Quel est le codage mèmoire d'un ecran EGA ?

Message par djes »

Hum, donc comme dans la deuxième image que tu as envoyée. Moi j'ai le premier résultat, je pense donc qu'il faut inverser le RGB->BGR. A noter que je suis sous XP, donc pas de DX11. J'ai aussi l'impression que ton image est légèrement décalée, il faudrait peut-être remplacer les 10 octets par une autre valeur.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Quel est le codage mèmoire d'un ecran EGA ?

Message par G-Rom »

si en changeant le subsystem ca deconne , c'est un bug de rgb() , j'avais le même problème fût un temps avec opengl/dx , win/linux.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Quel est le codage mèmoire d'un ecran EGA ?

Message par djes »

Oui, sur Mac aussi, c'est un grand classique ! Comme les images qui s'inversent sur Powerpoint :D Microsoft dans ses œuvres :D
Répondre