Quel est le codage mèmoire d'un ecran EGA ?
Re: Quel est le codage mèmoire d'un ecran EGA ?
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.
Re: Quel est le codage mèmoire d'un ecran EGA ?
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.
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.
Re: Quel est le codage mèmoire d'un ecran EGA ?




Dernière modification par Eric le ven. 06/sept./2013 9:17, modifié 1 fois.
Re: Quel est le codage mèmoire d'un ecran EGA ?
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
Re: Quel est le codage mèmoire d'un ecran EGA ?
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.
l'affichage n'est plus correct quand j'élimine option du compilateur et donc je reviens en DirectX9.
Re: Quel est le codage mèmoire d'un ecran EGA ?
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...)
Re: Quel est le codage mèmoire d'un ecran EGA ?
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"
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"
Re: Quel est le codage mèmoire d'un ecran EGA ?
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.
Re: Quel est le codage mèmoire d'un ecran EGA ?
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.
Re: Quel est le codage mèmoire d'un ecran EGA ?
Oui, sur Mac aussi, c'est un grand classique ! Comme les images qui s'inversent sur Powerpoint
Microsoft dans ses œuvres 

