Page 1 sur 1

...

Publié : dim. 29/août/2004 21:08
par Psycode
...

Publié : dim. 29/août/2004 21:23
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

Publié : dim. 29/août/2004 21:31
par Psycode
...

Publié : lun. 30/août/2004 0:06
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

Publié : lun. 30/août/2004 0:17
par Psycode
...

Publié : lun. 30/août/2004 0:20
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 ;)

Publié : lun. 30/août/2004 0:28
par Psycode
...

Publié : lun. 30/août/2004 8:30
par Psycode
...

Publié : lun. 30/août/2004 8:50
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