Legerement MARRE de MemVideo !!

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@SPH

Pour les photos, il y a une fonction API :

1) Tu créées une structure pour chaque pixel

Code : Tout sélectionner

Structure PIXEL
A.B
R.B
V.B
B.B
EndStructure
2) Tu crées ton tableau

Code : Tout sélectionner

Global Dim Pixel.PIXEL(iw - 1, ih - 1)
3) Tu transfères le tableau dans un bitmap

Code : Tout sélectionner

ImageID.L = CreateBitmap_(iw, ih, 1, 32, @Pixel(0, 0) )
4) Tu affiches ton image

Code : Tout sélectionner

DrawAlphaImage(ImageID, x, y)
* 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.
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Message 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)
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@SPH

Cette opération:

Code : Tout sélectionner

MemVideo + DrawingBufferPitch() * u
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...
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Ollivier a écrit :@SPH

Cette opération:

Code : Tout sélectionner

MemVideo + DrawingBufferPitch() * u
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.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Tu sais ce que c'est qu'un tableau d'octets (en anglais byte) ?

Code : Tout sélectionner

Dim Octet.B(999)
???
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Ollivier a écrit :Tu sais ce que c'est qu'un tableau d'octets (en anglais byte) ?

Code : Tout sélectionner

Dim Octet.B(999)
???
Oui
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Salut Dobro, encore merci pour ton code plus !
Répondre