...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Psycode
Messages : 131
Inscription : lun. 23/août/2004 18:47
Localisation : Jupiter ?

...

Message par Psycode »

...
Dernière modification par Psycode le ven. 03/sept./2004 17:14, modifié 1 fois.
Wait And See...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

tu peux récupérer les adresses des deux écrans (drawing buffer)...
et avec les infos sur l'écran (largeur, hauteur et pixel format) tu peut connaitre la taille de la mémoire écran... et donc faire des copies avec copymemory...

Dri
Psycode
Messages : 131
Inscription : lun. 23/août/2004 18:47
Localisation : Jupiter ?

Message par Psycode »

...
Dernière modification par Psycode le ven. 03/sept./2004 17:14, modifié 1 fois.
Wait And See...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

un code en veux-tu, en voila
simple à taper mais un peu long... pour un ptit snippet

Code : Tout sélectionner

If InitSprite()=0
  MessageRequester("Erreur", "Impossible d'ouvrir DirectX 7 ou +", 16)
  End
EndIf

#largeur_ecran = 640
#hauteur_ecran = 480
#profondeur_ecran = 32

If OpenScreen(#largeur_ecran, #hauteur_ecran, #profondeur_ecran, "")=0
  info_ecran$ = Str(#largeur_ecran)+"*"+Str(#hauteur_ecran)+" "+Str(#profondeur_ecran)+"bits"
  MessageRequester("Erreur", "Impossible d'ouvrir un écran de "+info_ecran$, 16)
  End
EndIf

;là on va dessiner à l'écran pour récupérer ses informations
If StartDrawing(ScreenOutput())
  Buffer1      = DrawingBuffer()
  Pitch1       = DrawingBufferPitch()
  PixelFormat1 = DrawingBufferPixelFormat()
  StopDrawing()
Else
  MessageRequester("Erreur", "Impossible de dessiner à l'écran", 16)
  End
EndIf

; on fait pareil avec l'autre écran
FlipBuffers()

If StartDrawing(ScreenOutput())
  Buffer2      = DrawingBuffer()
  Pitch2       = DrawingBufferPitch()
  PixelFormat2 = DrawingBufferPixelFormat()
  StopDrawing()
Else
  MessageRequester("Erreur", "Impossible de dessiner à l'écran", 16)
  End
EndIf

CloseScreen()

;là on va afficher les informations qu'on a récupérées

;on commence par définir les formats de pixels (voir dans l'aide)
Dim format_pixel.s(7)
format_pixel(1) = "#PB_PixelFormat_8Bits"
format_pixel(2) = "#PB_PixelFormat_15Bits"
format_pixel(3) = "#PB_PixelFormat_16Bits"
format_pixel(4) = "#PB_PixelFormat_24Bits_RGB"
format_pixel(5) = "#PB_PixelFormat_24Bits_BGR"
format_pixel(6) = "#PB_PixelFormat_32Bits_RGB"
format_pixel(7) = "#PB_PixelFormat_32Bits_BGR"

Dim profondeur_pixel(7) ;en octet(s)
profondeur_pixel(1) = 1
profondeur_pixel(2) = 2
profondeur_pixel(3) = 2
profondeur_pixel(4) = 3
profondeur_pixel(5) = 3
profondeur_pixel(6) = 4
profondeur_pixel(7) = 4

;voila pour le premier écran
Debug "Premier écran"
Debug "Adresse : "+Str(Buffer1)
Debug "Pitch : "+Str(Pitch1)+" octets"
Debug "Format des pixels : "+format_pixel(PixelFormat1)
Debug "Taille des pixels : "+Str(profondeur_pixel(PixelFormat1))+" octets"
taille1 = #largeur_ecran*#hauteur_ecran*profondeur_pixel(PixelFormat1)
Debug "Taille de la mémoire de l'écran : "+Str(taille1)+" octets"
Debug " "

;à priori le second est identique (sauf son adresse bien sûr)
Debug "Second écran"
Debug "Adresse : "+Str(Buffer2)
Debug "Pitch : "+Str(Pitch2)+" octets"
Debug "Format des pixels : "+format_pixel(PixelFormat2)
Debug "Taille des pixels : "+Str(profondeur_pixel(PixelFormat2))+" octets"
taille2 = #largeur_ecran*#hauteur_ecran*profondeur_pixel(PixelFormat2)
Debug "Taille de la mémoire de l'écran : "+Str(taille2)+" octets"
Debug " "
Dri
Psycode
Messages : 131
Inscription : lun. 23/août/2004 18:47
Localisation : Jupiter ?

Message par Psycode »

...
Dernière modification par Psycode le ven. 03/sept./2004 17:15, modifié 1 fois.
Wait And See...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

lol, y'a un moyen simple
tu dessine aux coords 0 0 un pixel avec le r le g et le b différents
tu récupere en mémoire l'entier long à l'adresse de drawingbuffer()
et tu analyse avec les fonctions red green et blue

Dri ;)
Psycode
Messages : 131
Inscription : lun. 23/août/2004 18:47
Localisation : Jupiter ?

Message par Psycode »

...
Dernière modification par Psycode le ven. 03/sept./2004 17:15, modifié 1 fois.
Wait And See...
Psycode
Messages : 131
Inscription : lun. 23/août/2004 18:47
Localisation : Jupiter ?

Message par Psycode »

...
Dernière modification par Psycode le ven. 03/sept./2004 17:15, modifié 1 fois.
Wait And See...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

c'est possible de bosser sur un seul écran
j'ai jamais essayé... mais le truc c'est de récupérer l'adresse de lécran en cours et de jamais utiliser flipbuffers() ;)

Dri
Répondre