GetDIBits

Signaler
Messages postés
289
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
28 février 2009
-
MaxSoldier
Messages postés
289
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
28 février 2009
-
Bonjour, je me suis remis à mon moteur 2D et j'ai toujours ce même problème de texture :
Voici mon code :

Sub SpeedLoadTex(TexPath As String, ByVal iX As Single, ByVal iY As Single, Height As Long, Width As Long)
Dim TexInfo As BITMAPINFO
Dim TexBitArray() As Byte



If iY <> 0 And iX <> 0 Then


TexPicture.Picture = LoadPicture(TexPath)


' Initialisation des données de l'image
' -----------------------------------------------
TexInfo.bmiHeader.biSize = Len(TexInfo.bmiHeader)


TexInfo.bmiHeader.biWidth = TexPicture.ScaleWidth
TexInfo.bmiHeader.biHeight = TexPicture.ScaleHeight


TexInfo.bmiHeader.biPlanes = 1
TexInfo.bmiHeader.biBitCount = 32
TexInfo.bmiHeader.biCompression = BI_RGB
' -----------------------------------------------


' Redimension du tableau et récupération des données
' ------------------------------------------------------------------------------------------------------------------------
ReDim TexBitArray(1 To 4, 1 To TexPicture.Width, 1 To TexPicture.Height)
DoEvents


Call GetDIBits(TexPicture.hdc, TexPicture.Image, 0, TexInfo.bmiHeader.biHeight, bArray(1, iX, GetRealY(iY)), TexInfo, DIB_RGB_COLORS)
' ------------------------------------------------------------------------------------------------------------------------


End If
End Sub

Où TexPicture est le picture box ou je charge ma texture, et bArray(1,1,1) est mon tableau principale.

Regardez le résultat :

Si vous savez comment résourdre le problème ...

Merci d'avance !
-=Ar$£nik=-

6 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
23
GetDIBits TexPicture.hdc, TexPicture.Image, 0,
TexInfo.bmiHeader.biHeight, bArray(1,1, 1), TexInfo,
DIB_RGB_COLORS







pourquoi iX et iY puisque toute la table est utilisée

à quoi sert Height et With en paramètres.

si tu veux limiter il faut jouer sur nStartScan et nNumScans,
donc sur le nombre de Lignes, iX devrait toujours commencer à 1, et si
iY est différent de 1, le bArray devrait être plus grand ou le biHeight
plus petit, ce qui n'est pas le cas ici puisque toute la taille de
TexPicture est utilisée.


Daniel
Messages postés
289
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
28 février 2009
2
1 ) J'utilise iX et iY car non, tout le tableau n'est pas utilisé. Imagine, une texture de 64x64 et un tableau de 800x600

2) Height et Width sont des paramètre qui ne servent pas encore mais
ils serviront. Avant de gérer le scaling, je vais déja gérer le
rendu... :D


3) Juste, il y a un redim en trop ne le considérez pas.
-=Ar$£nik=-
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
23
bArray(1,iX, iY) impossible

iX et iY ne sont pas reconnus comme paramètres par

GetDIBits

il s'agit seulement d'une adresse et c'est à partir de cette adresse
que le tableau sera rempli en commençant par la Ligne debut=nStartScan pour un nombre de Lignes=nNumScans

dans l'exemple 800x600 tous les 800 pixels d'une Ligne seront pris, il n'y a pas de paramètres X début.





vu le post précédent:

http://www.vbfrance.com/forum.v2.aspx?ID=644003



ReDim TexBitArray(1 To 4, 1 To TexPicture.Width, 1 To TexPicture.Height)

Call GetDIBits(TexPicture.hdc, TexPicture.Image, 0, TexPicture.ScaleHeight, TexBitArray(1, 1, 1), TexInfo, DIB_RGB_COLORS)

on prend tout le tableau et on sélectionne après

je crois que c'est la bonne solution



le StrechBlt me gêne un peu

StretchBlt TexPicture.hdc, 0, 0, Width, Height, TexPicture.hdc, 0, 0, TexPicture.Width, TexPicture.Height, vbSrcCopy

StrechBlt sur lui-même en réduction ça doit pas faire joli ...

PaintPicture est de meilleur qualité



Nb: astuce pour remettre le Tableau à l'endroit:

TexInfo.bmiHeader.biHeight = - TexPicture.ScaleHeight


Daniel
Messages postés
289
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
28 février 2009
2
Oki merci beaucoup :D

-=Ar$£nik=-
Messages postés
289
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
28 février 2009
2
Pendant que j'y suis comment je peux faire alors pour copier mon
tableau de byte dans le tableau principale à une certaine place et le
plus rapidement possible ?


-=Ar$£nik=-
Messages postés
289
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
28 février 2009
2
oups pardon avais pas lu jusqu'au bout :p

-=Ar$£nik=-