Bonjour,
Pour la profondeur de couleur je pense que c'est du 32bits vu que c'est des codes couleurs RGBA?
Oui.
Bon cela fait qu'en mémoire ton bitmap pour la zone de données représente :
10 000* 4 octet * 10 000 = 400 Mo mais il n'y a rien d'ingérable.
je n'ai pas du tout le langage informaticien, car c'est pas mon job
Là ça va être plus difficile d'expliquer comment faire car cela fait appel à des notions un peu complexes.
Un DIB est un bitmap indépendant du périphérique. Qui est décrit par une structure BITMAPINFO et un tableau d'octets contenant les "pixels" de ton bitmap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <StructLayout(LayoutKind.Explicit)> Public Structure BITMAPINFOHEADER
<FieldOffset(0)> Public biSize As Int32
<FieldOffset(4)> Public biWidth As Int32
<FieldOffset(8)> Public biHeight As Int32
<FieldOffset(12)> Public biPlanes As Int16
<FieldOffset(14)> Public biBitCount As Int16
<FieldOffset(16)> Public biCompression As Int32
<FieldOffset(20)> Public biSizeImage As Int32
<FieldOffset(24)> Public biXPelsperMeter As Int32
<FieldOffset(28)> Public biYPelsPerMeter As Int32
<FieldOffset(32)> Public biClrUsed As Int32
<FieldOffset(36)> Public biClrImportant As Int32
End Structure
<StructLayout(LayoutKind.Sequential)> Public Structure RGBQUAD
Public rgbBlue As Byte
Public rgbGreen As Byte
Public rgbRed As Byte
Public rgbReserved As Byte
End Structure
<StructLayout(LayoutKind.Sequential)> Public Structure BITMAPINFO
Public bmiHeader As BITMAPINFOHEADER
<MarshalAs(UnmanagedType.ByValArray, sizeconst:=256)> Public bmiColors() As RGBQUAD
End Structure |
Pour dessiner ce DIB il faut ensuite utiliser l'API WIN32:
Private Declare Function StretchDIBits Lib "gdi32" (ByVal hdc As IntPtr, ByVal x As Intptr, ByVal y As Intptr, ByVal dx As Intptr, ByVal dy As Intptr, ByVal SrcX As Intptr, ByVal SrcY As Intptr, ByVal wSrcWidth As Intptr, ByVal wSrcHeight As Intptr, ByVal lpBits As IntPtr, ByRef lpBitsInfo As BITMAPINFO, ByVal wUsage As UIntptr, ByVal dwRop As UIntptr) As Intptr
où lpBits sera un pointeur vers le premier élément de ton tableau.
Pour dimensionner ton tableau il faut que chaque ligne horizontale de l'image soit alignée sur 32 bits, donc en fonction de la profondeur de couleur cela change.
Pour créer ton tableau le plus simple est d'utiliser l'interopservice et son marshall pour allouer une zone mémoire de la taille voulue.
Pour tout cela tu peux t'inspirer de ce post:
http://www.developpez.net/forums/d10...-image-bitmap/
Mais tout cela n'est pas trivial ...
Partager