Page 4 sur 4
Publié : dim. 04/mai/2008 17:04
par Ollivier
@SPH
Pour les photos, il y a une fonction API :
1) Tu créées une structure pour chaque pixel
2) Tu crées ton tableau
3) Tu transfères le tableau dans un bitmap
4) Tu affiches ton image
* Si tout est noir, n'oublie pas que la teinte Alpha (le \A dans la structure PIXEL doit toujours être égale à 255 ou $FF).
* Si le rouge et le bleu sont incohérents, tu corriges la structure (en inversant \B et \R).
* Si l'image a fait un double flip, inverse les valeurs x et y dans le tableau et tes calculs de dessin au sein de ce tableau.
Publié : lun. 05/mai/2008 13:32
par SPH
Merci a tous.
Juste une derniere chose pour finir avec le passage d'un tableau en une seule fois. Cela ne semble maintenant plus possible de le faire; sauf si DrawingBufferPitch()/4 = largeur de la fenetre ouverte.
Si les 2 lignes a l'ecran restent fixes, bravo, le passage en une seule fois d'un tableau dans la memvideo a reussi :
Code : Tout sélectionner
InitSprite()
InitKeyboard()
dw=1280 ;;; essayez differentes resolutions
dh=1024
dc=32
If OpenScreen(dw,dh,dc,"")=0
End
EndIf
Dim p(dh-1,dw-1)
For i=0 To dh-1
p(i,i)=RGB(0,0,255) ; ligne diagonale partant de 0,0
Next
For i=0 To dh-1
p(dh-1-i,dw-1-i)=RGB(255,0,0) ; ligne diagonale partant de dw,dh
Next
;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;
Repeat
StartDrawing(ScreenOutput())
If Random(1) ;>>> ici on va basculer aleatoirement entre un tracage ligne par ligne
MemVideo = DrawingBuffer()
For u=0 To dh-1
CopyMemory(@p(u,0), MemVideo+DrawingBufferPitch()*u,dw*4)
Next
Else ;>>> et un tracage en envoyant un tableau en une fois dans la memvideo
MemVideo = DrawingBuffer()
CopyMemory(@p(), MemVideo,dw*dh*4)
EndIf
StopDrawing()
FlipBuffers()
Delay(1)
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Publié : mar. 06/mai/2008 18:27
par Ollivier
@SPH
Cette opération:
Elle peut être remplacée par un simple pointeur (ex: *StartLine)
Code : Tout sélectionner
; *** Copie ligne par ligne ***
*StartLine = DrawingBuffer()
BufferPitch.L = DrawingBufferPitch()
LineSize.L = dw * 4
For u=0 To dh-1
CopyMemory(@p(u, 0), *StartLine, LineSize)
*StartLine + BufferPitch
Next
ça évite du calcul...
Publié : mar. 06/mai/2008 20:53
par SPH
Ollivier a écrit :@SPH
Cette opération:
Elle peut être remplacée par un simple pointeur (ex: *StartLine)
Code : Tout sélectionner
; *** Copie ligne par ligne ***
*StartLine = DrawingBuffer()
BufferPitch.L = DrawingBufferPitch()
LineSize.L = dw * 4
For u=0 To dh-1
CopyMemory(@p(u, 0), *StartLine, LineSize)
*StartLine + BufferPitch
Next
ça évite du calcul...
Merci. Oui, je l'avoue, je n'y connais encore rien en pointeur mais va biens falloir que je m'y mette.
Publié : jeu. 08/mai/2008 19:01
par Ollivier
Tu sais ce que c'est qu'un tableau d'octets (en anglais byte) ?
???
Publié : jeu. 08/mai/2008 19:12
par SPH
Ollivier a écrit :Tu sais ce que c'est qu'un tableau d'octets (en anglais byte) ?
???
Oui
Publié : sam. 31/mai/2008 6:10
par Ollivier
Salut Dobro, encore merci pour ton code plus !