MaxSoldier
Messages postés289Date d'inscriptiondimanche 10 août 2003StatutMembreDernière intervention28 février 2009
-
19 janv. 2006 à 15:34
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
19 janv. 2006 à 18:12
Bonjours, dans le cadre de la conception d'un moteur 2D, j'ai une question a vous poser. D'abord, la situation :
-J'ai un tableau qui contient toute mes données ( couleur de pixel ) -> C'est un tableau à
3 dimensions : bArray(1 To 4, 1 To Pic.Width, 1 To Pic.Height) ou Pic
est le controle PictureBox où je fais mon rendu.
-J'ai un second tableau qui contient une texture : TexBitArray(1 To 4, 1
To TexPicture.Width, 1 To TexPicture.Height) où TexPicture est le
pictureBox qui contient ma texture.
J'ai chargé l'image dans mon second tableau, il n'y a aucune problème. ( Call
GetDIBits(TexPicture.hdc, TexPicture.Image, 0, TexPicture.ScaleHeight,
TexBitArray(1, 1, 1), TexInfo, DIB_RGB_COLORS) )
Mais je voudrais copier TexBitArray à une certaine place de bArray pour mettre ma texture dans le tableau principale.
J'ai un code qui marche mais il est trop lent ( voir le code à la fin )
et je n'arrive pas à recopier le tableau qui contient
ma texture dans le tableau principale grace à GetDIBits.
J'epère avoir été assez claire. Voici mon code :
<hr size="2" width="100%">Sub LoadTex(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
Dim iXBuffer As Single
Dim iYBuffer As Single
Dim RealY As Single
TexPicture.Picture = LoadPicture(TexPath)
If Height <> 0 Or Width <> 0 Then
If TexPicture.Height <> Height Or TexPicture.Width <> Width Then
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 19 janv. 2006 à 18:12
En générale, l'API windows est plus rapide que ce qu'ont peut essayer de faire par nous même en VB.
Pour ton moteur, tu peux simplement utiliser des routines de l'API, par exemple BitBlt, qui copie un rectangle d'un hdc dans un autre. Sinon, il y a aussi PlgBlt qu'est pas mal, pour les rotations nottement. Et il y en à une autre que j'ai jamais réussi à utiliser, (MaskBlt ou quelque chose comme ça), qui est sensé copier en fonction d'un mask, et qui permet donc des copies par parties (PlgBlt le fait aussi: elle est vraiment bien.). Mais pour les Mask, il faut faire les mask soit même (Bmp noir et blanc) ou les générer à partir des fichiers de base (Je suis pas sûr que ce soit possible en VB).