Set-Pixel ?

DedeSurf Messages postés 156 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 23 novembre 2011 - 12 oct. 2005 à 22:06
papiboff Messages postés 19 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 10 avril 2006 - 4 nov. 2005 à 11:12
Salut a tous !



J'ai un tout petit problème, le graphique, trop souvent lent sur vb



On ma conseillé d'utilisé SetPixel au contraire de Objet.Pset

Mais s'est trop lent encore ex: une frame de 800x600 (pixel) on voit défilé les pixel un a un.



Sinon utiliser Dx ou OpenGL ... Chaud a utilisé surtout pour traité pixel par pixel.



Alors si vous avez une solution interessante pour dessiner des pixel rapidement merci de repondre

11 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
12 oct. 2005 à 22:08
va voir ma source nommée DKS_Gestion_Image, si après cà, tu trouve que
c'est trop lent, on ne pourra plus faire grand chose (environ 30x plus
rapide que Get/SetPixel...)

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
DedeSurf Messages postés 156 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 23 novembre 2011
12 oct. 2005 à 22:10
Ok merci je vais voir tt de suite ;)
papiboff Messages postés 19 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 10 avril 2006
1 nov. 2005 à 11:25
tu as aussi SetBitmapBits (mapdc,len(mem),addr[mem])
GetBitmapBits (addr[mem],len(mem),mapdc)
si tu veux modifier addr[mem] = rouge --
addr[mem] +1 = vert | --> premier pixel rvb
addr[mem] +2= bleu --

addr[mem] +3= rouge --
addr[mem] +4= vert | --> deuxième pixel rvb
addr[mem] +5= bleu --
etc.......
pour moi la modif est en asm
a+
papi
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
1 nov. 2005 à 11:47
Je déconseille vivement de ne plus utiliser Get/SetBitmapBits : ces
fonctions sont de vieilles fonctions 16 bits qui sont amenées à
disparaître (avec Windows Vista ???), il vaux mieux utiliser GetDIBits
et SetDIBits, comme je le fais dans ma classe de gestion d'image...

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
papiboff Messages postés 19 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 10 avril 2006
1 nov. 2005 à 18:57
bj
Je n'ai rien contre les api en 16bits !? ben ragardes les instructions des microprocesseurs 32 ... 64.... 128? biiiiiiiits elles sont toujours avec une racine 16bits ouioui!
A+
papi
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
1 nov. 2005 à 19:18
Oui tout à fait, mais utiliser une fonction 16 bits qui n'est encore là
que pour garder la compatibilité avec les programmes 16 bits, et qui
peuvent disparaître du jour au lendemain selon l'humeur de Microsoft,
c'est du suicide.



Je te l'accorde, elles sont plus simples que GetDIBits et SetDIBits,
mais il s'agit de "vieilles" fonctions sorties à l'époque de Windows 3,
et les choses ont bien évolué depuis.



C'est pour cette raison que je prèfère déconseiller leur utilisation.

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
papiboff Messages postés 19 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 10 avril 2006
2 nov. 2005 à 18:54
bj
bon ; de la façon dont tu as repondu , j'ai regardé
DKS_GESTION_IMAGE ; c'est bien !.
je veux pas etre fauxcu , comme beaucoup !? ; j'utilise rapidq ; ben oui ,
pasque vb est facilement transposable en rapidq .(respires)
mais vous devriez vous mettre à l'asm (juré c'est fastoche)pour les modifffs
entre GetDIBits et SetDIBits pour ton image je dirai 0.0002 s avec un pc pas bon 600 mhz le mien quoi!.
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
2 nov. 2005 à 19:35
Houla, il y a quand même un grand pas entre le VB et l'asm, et la logique n'est pas la même.



Avec cette source, je voulais montrer qu'en VB, on peut faire aussi
rapide (ou presque) que le C, tout en gardant la fléxibilité et la
facilité du VB (pas de pointeurs nottament).



Je ne cherche pas forcément la vitesse pure (sinon j'aurais directement
fait une dll C), mais plus un compromis entre vitesse et facilité
d'utilisation (d'où l'affectation d'un picturebox, le nom des fonctions
qui sont identiques aux API bien connue, etc.).



C'est sûr qu'en asm, ma source serait bien plus rapide, mais c'est pas le but.



Sinon, c'est quoi le rapidq ??? je connais pas cà !

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
papiboff Messages postés 19 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 10 avril 2006
3 nov. 2005 à 10:55
bj

laisses tomber pour rapidq (c'est pas interessant pour toi)
quant je programme il me faut toujours 1° langage évolué pour 95% des applics 2° l'asm pour le reste
oui mais le reste fait beaucoup -> se faire plaisir à réaliser un programme comme les Pros QUOI !?...
mais expliques svp pour moi et les autres les paramètres
Private Declare Function SetDIBits Lib "gdi32.dll" ( _
ByVal hdc As Long, _
ByVal hBitmap As Long, _
ByVal nStartScan As Long, _
ByVal nNumScans As Long, _
ByRef lpBits As Any, _
ByRef lpBI As BITMAPINFO, _
ByVal wUsage As Long) As Long

hdc ----> getdc ( de quoi ?) --> hdc=CreateCompatibleDC( GetDC( de quoi ) ) ?

hbitmp ----> là le bitmap que tu crées ? avec hbitmp=CreateCompatibleBitmap(hdc,width,height) ?
selectobject (hdc,hbitmp)
nStartScan --> c'est quoi ?
nNumScans --> le len du scan ?
lpBits --> le x , y de quoi ?
lpBI etc ... ?
merci
a+
papi
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
4 nov. 2005 à 08:18
Comme expliqué dans la MSDN :

* hdc : Handle to a device context.
* hbmp : Handle to the bitmap that is to be altered using the color data from the
specified DIB.
* uStartScan : Specifies the starting scan line for the device-independent color data in
the array pointed to by the lpvBits parameter.
* cScanLines : Specifies the number of scan lines found in the array containing
device-independent color data.
* lpvBits : Pointer to the DIB color data, stored as an array of bytes. The format of
the bitmap values depends on the biBitCount member of the
BITMAPINFO structure pointed to by the lpbmi parameter.
* lpbmi : Pointer to a BITMAPINFO data structure
that contains information about the DIB.
* fuColorUse : Specifies whether the bmiColors member of the BITMAPINFO
structure was provided and, if so, whether bmiColors contains explicit
red, green, blue (RGB) values or palette indexes. The fuColorUse
parameter must be one of the following values.
Value |
Meaning |
----

DIB_PAL_COLORS |
The color table consists of an array of 16-bit indexes into the
logical palette of the device context identified by the hdc
parameter.,
----

DIB_RGB_COLORS |
The color table is provided and contains literal RGB values.

En français et en plus clair, ca donne :

hdc : Handle du DC dans lequel on veut travailler

hbmp : Handle du bitmap sélectionné dans le DC dont on veux récupèrer les bits.

uStartScan : Numéro de la première ligne qui sera extraite du buffer lpvBits

cScanLines : Nombre de ligne à récupèrer dans le buffer lpvBits

lpvBits : il s'agit du buffer à proprement parler, le format dépend de
la structure BITMAPINFO, et il est organisé de cette sorte (si mes
souvenirs sont bons) :

1 octet pour la composante bleue, 1 octet pour la composante verte, 1
octet pour la composante rouge, 1 octet pour la composante alpha
Mais cela dépend du nombre de bits alloués à chaque pixel dans la structure BITMAPINFO.

lpbmi : La fameuse structure BITMAPINFO qui contient les informations
concernant le bitmap sélectionné dans le DC. On y définit nottament la
taille du bitmap (largeur et hauteur EN PIXELS !), les informations
concernant la palette utiisée, le nombre de bits par pixels, etc. =>
Structure très importante, mais c'est souvent la même qui revient vu
qu'on travaille principalement en 24 bits voire 32 bits de nos jours,
et le 256 bits voir 8 bits fait presque partis de nos souvenirs
douloureux ;)

fuColorUse : pas de grand intérêt, ca permet juste d'utiliser une
palette spécifique, ou des composantes RGB, perso, j'ai toujours
utilisé des composantes RGB, et je ne me suis jamais intéressé
réellement aux palettes, bien que ca doit être très pratique et utilisé
dans le domaine des logiciels de retouches et les principaux formats de
fichiers !

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
papiboff Messages postés 19 Date d'inscription dimanche 16 octobre 2005 Statut Membre Dernière intervention 10 avril 2006
4 nov. 2005 à 11:12
Bj
merci DarK Sidious

t'es sympa je vais tester en refaisant ma dll en asm
mon applic est un peu différente de la tienne
elle lit les images de ma webcam en temps réel et les modifient
a+

papi
Rejoignez-nous