Yep, on avance, merci G-Rom! Je trouve bizarre que RGB() ne fasse pas le ceil() comme tu le fais. Du coup, j'ai adapté le code de SPH pour générer un fichier hexa quand ça déraille. Voici un extrait du résultat :
Assez curieusement, on a effectivement un débordement dans l'octet de poids fort (normalement l'alpha), mais parfois les valeurs des couleurs aussi changent.
Code : Tout sélectionner
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; BUG GRAPHIQUE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
InitSprite()
InitKeyboard()
InitMouse()
#dw=1024
#dh=768
#dc=32
If OpenScreen(#dw,#dh,#dc,"Another Earth")=0
MessageRequester("Erreur", "Screen Open ("+Str(#dw)+","+Str(#dh)+",32) : impossible à ouvrir", 0) : End
EndIf
LoadFont(1, "Arial", 12)
StartDrawing(ScreenOutput())
Box(0,0,#dw/2,#dh,RGB(0,255,0))
Box(#dw/2,0,#dw/2,#dh,RGB(255,0,0))
Box(4,4,#dw/2-8,#dh-8,0)
Box(#dw/2+4,4,#dw/2-8,#dh-8,0)
DrawingMode(#PB_2DDrawing_Default)
DrawingFont(FontID(1))
DrawText(#dw/2+30,#dh-30,"WAIT...", RGB(255,255,255))
StopDrawing()
GrabSprite(0,0,0,#dw,#dh)
FlipBuffers()
DisplaySprite(0,0,0)
Dim p(#dw/2,#dh)
StartDrawing(ScreenOutput())
For u=4 To #dh-5
For i=4 To #dw/2-5
color=RGB(Random(i%700),Random(u%400),Random((i+u)%600))
Plot(i,u,color)
p(i,u)=color
Next
If u%8=0
StopDrawing()
GrabSprite(0,0,0,#dw,#dh)
FlipBuffers()
DisplaySprite(0,0,0)
StartDrawing(ScreenOutput())
EndIf
Next
StopDrawing()
OpenFile(0, "c:\RGBbug.txt")
percent=0
max=0
StartDrawing(ScreenOutput())
For u=4 To #dh-5
For i=4 To #dw/2-5
color=Point(i,u)
Plot(i+#dw/2,u,color)
max+1
If color<>p(i,u)
Plot(i+#dw/2,u,RGB(255,255,255))
WriteStringN(0, "Point : $" + RSet(Hex(color, #PB_Long), 8, "0")+" ; Couleur : $" + RSet(Hex(p(i, u), #PB_Long), 8, "0"))
;Debug color
percent+1
EndIf
Next
If u%8=0
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
StopDrawing()
CloseFile(0)
GrabSprite(0,0,0,#dw,#dh)
FlipBuffers()
DisplaySprite(0,0,0)
StartDrawing(ScreenOutput())
EndIf
Next
StopDrawing()
LoadFont(1, "Arial", 9)
StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Default)
DrawingFont(FontID(1))
;descrip$=" Si vous avez la meme chose dans le cadre vert et dans le cadre rouge, vous n'avez pas le bug graphique du ''Point(x,y)'' "
;DrawText(#dw/2-TextWidth(descrip$)/2,#dh-60,descrip$, RGB(255,255,255))
f.f=(percent*100)/max
If f=0
descrip$=" Aucun bug graphique du ''Point(x,y)'' "
Else
descrip$=" Le bug du ''Point(x,y)'' est présent à "+StrF(f.f)+"% "
EndIf
DrawText(#dw/2-TextWidth(descrip$)/2,#dh-36,descrip$, RGB(255,255,255))
StopDrawing()
;;;;;;;;;; si vous voulez sauvegarder votre image...
GrabSprite(0,0,0,#dw,#dh) : SaveSprite(0,"d:/test_gfx.bmp")
;;;;;;;;;;
FlipBuffers()
Repeat
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
End
;;;;;;;;;;;;;;;