Une chose très bizarre se passe lors la sauvegarde de l'image. L'image affichée à les bonnes couleurs alors que l'image sauvée sur le disque a subi un changement de couleurs comme un "xor". Après vérification, mon compilateur avait en option sous système "DirectX11".
Si je supprime l'option, l'image affichée ne comporte plus les bonnes couleurs.
Code : Tout sélectionner
DataSection
Image1:
IncludeBinary "66901.IM1"
Image2:
IncludeBinary "66901.IM2"
Image3:
Table_Couleurs:
Data.s "$000000","$0000aa","$00aa00","$00aaaa","$aa0000","$aa00aa","$aaaa00","$aaaaaa"
Data.s "$000055","$0000ff","$00aa55","$00aaff","$aa0055","$aa00ff","$aaaa55","$aaaaff"
Data.s "$005500","$0055aa","$00ff00","$00ffaa","$aa5500","$aa55aa","$aaff00","$aaffaa"
Data.s "$005555","$0055ff","$00ff55","$00ffff","$aa5555","$aa55ff","$aaff55","$aaffff"
Data.s "$550000","$5500aa","$55aa00","$55aaaa","$ff0000","$ff00aa","$ffaa00","$ffaaaa"
Data.s "$550055","$5500ff","$55aa55","$55aaff","$ff0055","$ff00ff","$ffaa55","$ffaaff"
Data.s "$555500","$5555aa","$55ff00","$55ffaa","$ff5500","$ff55aa","$ffff00","$ffffaa"
Data.s "$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.s(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)=Val(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