Page 1 sur 5
Le debut de la fin du bug du Point()
Publié : mar. 04/janv./2011 18:47
par SPH
Je viens de voir que ce chez Fred a viré la possibilité de faire un post relatif a un bug !
Alors, je le fais ici (mais je l'ai aussi fais sur le fofo eng).
Pouvez vous executez ce code et me dire si la reponse est negative ??
UN TRUC : tjr utiliser un ecran 32 bits, ne changez pas ca.
Par contre, essayez differentes resolutions plz
Dobro, fais pas ta tete de cochon et essaye aussi

(tu noteras le smiley !!)
Code : Tout sélectionner
InitSprite()
InitMouse()
InitKeyboard()
If ExamineDesktops()
dw.w=DesktopWidth(0)
dh.w=DesktopHeight(0)
Else
dw.w=1024
dh.w=768
EndIf
nb=8290
cmb=0
;;;;;;;;;;;;;;
OpenScreen(dw,dh,32,"")
LoadSprite(0,"d:\SPH.bmp")
ClearScreen(0)
DisplaySprite(0,0,0)
;;;;;;;;;;;
StartDrawing(ScreenOutput())
For u=0 To 72
For i=0 To 178
x=Point(i,u)
If x<>0
cmb+1
EndIf
Next
Next
StopDrawing()
CloseScreen()
Debug ("Nombre de pixels non noir : "+Str(nb))
Debug ("Nombre de pixels non noir observé par l'instruction Point() : "+Str(cmb))
Debug (" ")
If nb=cmb
Debug ("No error")
Else
Debug ("ERREUR DE COMPTAGE DE POINT()")
EndIf
With this logo :

Re: Le debut de la fin du bug du Point()
Publié : mar. 04/janv./2011 19:11
par Backup
yes ! bug :

Re: Le debut de la fin du bug du Point()
Publié : mar. 04/janv./2011 21:56
par Le Soldat Inconnu
pas d'erreur, mais à voir ta méthode, je dirais que l'erreur est générée par la carte graphique elle même car tu regardes un sprite déjà affiché et pas l'image
Dobro, essaie ceci :
Code : Tout sélectionner
InitSprite()
InitMouse()
InitKeyboard()
If ExamineDesktops()
dw.w=DesktopWidth(0)
dh.w=DesktopHeight(0)
Else
dw.w=1024
dh.w=768
EndIf
nb=8290
cmb=0
;;;;;;;;;;;;;;
OpenScreen(dw,dh,32,"")
LoadImage(0,"SPH.bmp")
ClearScreen(0)
;;;;;;;;;;;
StartDrawing(ScreenOutput())
DrawImage(ImageID(0), 0, 0)
For u=0 To 72
For i=0 To 178
x=Point(i,u)
If x<>0
cmb+1
EndIf
Next
Next
StopDrawing()
CloseScreen()
Debug ("Nombre de pixels non noir : "+Str(nb))
Debug ("Nombre de pixels non noir observé par l'instruction Point() : "+Str(cmb))
Debug (" ")
If nb=cmb
Debug ("No error")
Else
Debug ("ERREUR DE COMPTAGE DE POINT()")
EndIf
Re: Le debut de la fin du bug du Point()
Publié : mar. 04/janv./2011 22:00
par venom
Nombre de pixels non noir : 8290
Nombre de pixels non noir observé par l'instruction Point() : 8290
No error
pas d'erreur pour ma part
@++
Re: Le debut de la fin du bug du Point()
Publié : mar. 04/janv./2011 22:28
par Noos88
Mois aussi je n'ai pas de défaut
Nombre de pixels non noir : 8290
Nombre de pixels non noir observé par l'instruction Point() : 8290
No error
Re: Le debut de la fin du bug du Point()
Publié : mar. 04/janv./2011 23:36
par Ollivier
Bonsoir SPH,
Je pense que, dans le cas de l'observation d'un pixel, si l'on veut rester dans le compatible, il est de bon aloi de s'offrir une marge de tolérance. Pour moi (mais ça ne reste que mon avis personnel...), le noir que je peux voir à l'écran, ça n'est pas seulement RGB(0, 0, 0). C'est aussi RGB(1, 0, 0), RGB(0, 1, 0), ou bien RGB(1, 1, 0) aussi, voire RGB(1, 1, 1), etc... Bref, c'est tout ce qui avoisine le noir absolu dans l'espace des couleurs.
Donc la condition
aboutit à quelque chose de peu rustique...
Voici une manière qui me semble plus adéquate (c'est le théorème de Pythagore appliqué dans l'espace des couleurs):
Code : Tout sélectionner
cx.I = RgbR(x)
cy.I = RgbG(x)
cz.I = RgbB(x)
If Sqr(cx * cx + cy * cy + cz * cz) < 2.
Re: Le debut de la fin du bug du Point()
Publié : mer. 05/janv./2011 1:50
par Backup
Le Soldat Inconnu a écrit :pas d'erreur, mais à voir ta méthode, je dirais que l'erreur est générée par la carte graphique elle même car tu regardes un sprite déjà affiché et pas l'image
Dobro, essaie ceci :
pareil meme erreur !

Re: Le debut de la fin du bug du Point()
Publié : mer. 05/janv./2011 7:53
par kernadec
bonjour
Toujours le même problème avec ma résolution de ouf 1920 1080..
mais en 1024 768 NO ERROR en utilisant POINT(x,y) ainsi qu'avec l'Api getpixel_ avec le code de Dobro
Cordialement
Code : Tout sélectionner
InitSprite()
InitMouse()
InitKeyboard()
If ExamineDesktops()
dw.w=DesktopWidth(0)
dh.w=DesktopHeight(0)
Else
dw.w=1024
dh.w=768
EndIf
;dw.w=1024
;dh.w=768
nb=8290
cmb=0
;;;;;;;;;;;;;;
hwnd=OpenScreen(dw,dh,32,"")
LoadSprite(0,"d:\SPH.bmp")
ClearScreen(0)
DisplaySprite(0,0,0)
;;;;;;;;;;;
dc=StartDrawing(ScreenOutput())
For u=0 To 72
For i=0 To 178
;x=Point(i,u)
x=GetPixel_(dc,i,u)
If x<>0
cmb+1
EndIf
Next
Next
StopDrawing()
CloseScreen()
Debug ("Nombre de pixels non noir : "+Str(nb))
Debug ("Nombre de pixels non noir observé par l'instruction Point() : "+Str(cmb))
Debug (" ")
If nb=cmb
Debug ("No error")
Else
Debug ("ERREUR DE COMPTAGE DE POINT()")
EndIf
Re: Le debut de la fin du bug du Point()
Publié : mer. 05/janv./2011 9:39
par djes
Tu parles d'une compatibilité! Avec Windows on est toujours dans la bidouille! M'étonne pas que les airbus se cassent la gueule!
Donc, si c'est un problème de drivers, que l'API devrait renvoyer une valeur de point() correcte, Fred n'a rien à corriger. A voir quand même si vos pilotes n'ont pas du Fullscreen Antialiasing activé ou un truc dans le genre, qui altérerait la valeur des pixels lors de leur écriture, et donc la valeur du point().
Re: Le debut de la fin du bug du Point()
Publié : mer. 05/janv./2011 9:47
par Cool Dji
Yep djes,
La prop d'Ollivier est sympa puisqu'elle intègre un éventuel lissage et prend bien en compte tous les points noirs ou presque noirs => bien entendu elle rend impossible le test de SPH sur le nombre précis de point noir...ou de tout autre couleur d'ailleurs !
Re: Le debut de la fin du bug du Point()
Publié : mer. 05/janv./2011 9:50
par kelebrindae
Aucune erreur chez moi en 640x480,800x600,1024x768,1280x768,1280x1024, avec une ATI Radeon HD 3400.
Il m'est venu une idée (probablement stupide mais bon, j'essaie quand même) : on sait que ta carte graphique est relativement récente et que les drivers sont à jour. On sait aussi que d'autres, avec un matériel comparable, n'ont pas le souci. Donc je me dis: ça vient peut-être de la façon dont ce matos est configuré.
=> moi, dans mon systray (à droite de la barre des tâches), j'ai un petit logo ATI qui donne accès à un menu de paramétrage (nVidia fait la même chose). Dans ce menu, j'ai par exemple une entrée "Standard Settings" avec 5 options allant de "optimal quality" à "optimal performance"; si je choisis cette dernière, je sais que le driver va pratiquer des optimisations sauvages pour obtenir le meilleur framerate. Est-ce qu'une de ces optimisations mènerait à une imprécision du "point" ou au bug que tu constates avec les "clearscreen(0)" ?
De même, j'ai une entrée "anti-aliasing" qui est désactivée par défaut mais peut être forcée à "x2" ou "x4". Si la carte fait de l'anti-aliasing, est-ce que ton "point" ne tomberait pas sur un pixel "anti-aliasé" et récupérerait alors une valeur différente de zéro ?
C'est un peu tiré par les cheveux, mais bon, qui sait?
[EDIT]: 'tain Djes, tu m'as pris de vitesse!
Re: Le debut de la fin du bug du Point()
Publié : mer. 05/janv./2011 9:54
par SPH
kernadec a écrit :bonjour
Toujours le même problème avec ma résolution de ouf 1920 1080..
mais en 1024 768 NO ERROR en utilisant POINT(x,y) ainsi qu'avec l'Api getpixel_ avec le code de Dobro
Cordialement
Oui mais si l'Api getpixel_ etait la solution, ca devrait marcher avec ton 1920/1080 !!
A propos, tu as 2 nombres differents en 1920/1080 ou bien le code ne se lance meme pas ?
Re: Le debut de la fin du bug du Point()
Publié : mer. 05/janv./2011 10:02
par SPH
Eliminons les hypotheses sur les pixels PRESQUE noirs avec ca :
Et pour l'histoire de l'antialiasing, ca m'etonnerais que l'antialias provoque un seul pixel de plus sur un tel logo !!
Re: Le debut de la fin du bug du Point()
Publié : mer. 05/janv./2011 11:14
par kelebrindae
Je viens de tester en modifiant les réglages dont j'ai parlé plus haut:
Avec anti-aliasing off => aucune erreur, quelque soit la résolution
avec anti-aliasing x4 => erreurs de comptage
On se rapproche d'une explication, non? Quels réglages as-tu sur ton poste ?
Re: Le debut de la fin du bug du Point()
Publié : mer. 05/janv./2011 12:56
par kernadec
@SPH
le test du code avec "ExamineDesltops"
l'éditeur écrit : exécutable démarré
type exécutable :Windows - x86 (32bit)
Openscreen ne se lance pas.
l'éditeur reste noir et rien ne se passe sinon que la souris répond plus,
j'ai recours "ctrl alt del" pour arrêter le processus.
et pour l'antialiasing s'il y en a un je n'ai pas trouver le moyen de le contrôler.
cordialement