Comment mettre dans un tableau Byte ou long PICTURE1.IMAGE ?

Signaler
Messages postés
130
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
28 janvier 2013
-
Messages postés
130
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
28 janvier 2013
-
Bonjours,
comme je l'ai ecrit dans le titre j'aiemrais copier ce que j'arrive à mettre dans une picturebox VERS =>>> un tableau de type long tant qu'à faire !

mais...

sans la fonction :
Call GetBitmapBits(picture1.Image.handle, nombre_octets&, le_futur_rgb(3))
j'aimerais la faire avec copymemory ou tout autre moyen avec des pointeurs(je fait aussi de l'assembleur cela me gêne pas)

en faite j'aimerais arriver à trouver l'adresse mémoire de l'image temporaire.
picture1.picture = image permanent (on ne peut l'effacer avec cls)
picture1.image = image temporaire (c'est là que pset, cls, line, ou les capture ecran appararait avec : StretchBlt picture1.hDC, Newx%, Newy%, Newx2% - Newx% + 1, Newy2% - Newy% + 1, GetDC(GetDesktopWindow()), xx%, yy%, xx2% - xx% + 1, yy2% - yy% + 1, vbSrcCopy )

et justement j'aimerais recopier l'image qui arrive dans picture1.image(renvoyer par StretchBlt)

mais je n'y arrive pas !

j’avais trouver le moyen de copier l'image permanent avec :

Dim BmpS As BITMAP
GetObject Picture1.Picture, Len(BmpS), BmpS
taille&=BmpS.bmWidthBytes*BmpS.bmHeight
CopyMemory le_futur_rgb(3), ByVal BmpS.bmBits, taille&
donc BmpS.bmBits est bien l'adresse de l'image permanent, avec ces pixels de couleur !!!

mais :
GetObject Picture1.IMAGE, Len(BmpS), BmpS
lui me renvoie BmpS.bmBits=0 !!! Donc pas d'adresse pour le graphique temporaire

alors j'ai rusé, et j'ai voulue faire picture1.picture=picture1.image (même si cela doit me faire perdre du temps) !
et bien là j'ai bien BmpS qui change car les taille change, donc cela marche, mais j'ai toujours BmpS.bmBits=0 !

pourtant lorsque l'on voie là :
http://www.codyx.org/snippet_transformer-image-picturebox-tableau-bytes_496.aspx#1936

en vb6 on utilise "GetBitmapBits", mais moi je préfère faire comme delphi 5 du 05/07/2008 :
on voie :
>> pX : Bitmap.ScanLine[Bitmap.Height-1];
=>> CopyMemory(@BytesArray[0], pX, LZ);
donc je présume qu'il faut transformer comme cela en vb6
>> pX image.adresse_des_pixels
=>> CopyMemory BytesArray(0), pX, LZ
mais justement comment trouver pX ????

j'ai beau chercher je ne trouve pas le moyen, one ne pas avoir la méthode scanline de delphi ?

6 réponses

Bonjour rebixav.

Je vous propose une solution désespérément simple, mais malheureusement sans le moindre de petit pointeur. Tout en VB6!
Private Sub bVld_Click()
Dim Pct As IPictureDisp, Chm As String, Tbl() As Byte
Dim i As Long, n As Long
Set Pct pBox.Image: Chm App.Path & "\Essai.bmp"
SavePicture Pct, Chm
n = FileLen(Chm): ReDim Tbl(1 To n)
Open Chm For Binary As 1
    For i = 1 To n
        Get 1, i, Tbl(i)
    Next i
Close
Kill Chm
End Sub

bVld est un bouton de commande, pBox est un PictureBox, et tous deux sont placés sur la feuille qui contient le code ci-dessus.

Cordialement


Étant illettré, je signe d'une croix : ×
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour zermelo.
Je ne crois pas qu'il cherche un tel tremplin, qui reviendrait à passer par un fichier image pour dresser son tableau, en utilisant une méthode que je lui ai indiquée dans son autre discussion.
Je ne sais pas trop ce qu'il semble croire à propos du "lien" existant entre la forme de la mémoire VB8 de l'image et sa transposition en image. Je lui en ai déjà parlé. Il a même eu un lien pour comprendre les deux mécanismes (tableau d'octets à partir de l'image et image à partir de tableau d'octets). Il dit qu'il "s'y perd" et attend je ne sais quoi d'autre. Démarche démesurée et sans gain réel de vitesse d'exécution.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
130
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
28 janvier 2013

merci de m'avoir répondue Zermelo
même si cela m'avais l'air pas la bonne solution en terme de vitesse, alors j'ai quand même essayer, j'ai même améliorer la procédure...
malheuresement cela fonctionnne mais j'ai 15 fois la vitesse en dessous de ce que GetBitmapBits, laors que moi j'essaye d'avoir encore plus rapide
...
si quelqu'un à d'autre idée, je suis prêt à tout essayer, mais je pense que c'est la solution delphi la meilleur si seulement on pouvais la refaire en VB ou .asm, elle, elle utilise le system de pointeur avec copymemory alors imaginez !!!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Tout simplement : VB6 et Delphi ne travaillent pas de la même manière et ni ne stockent de la même manière les données en mémoire de l'image, ni n'exploitent ensuite les dites données de la même manière.
VB6 travaille quant à lui sur un "torrent", comme je te l'ai déjà exposé dans ton autre discussion.
En d'autres termes : tu ne peux par exemple appliquer à un chiot les méthodes de nage d'un poisson.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Delphi utilise en ce qui le concerne un canevas (Canvas) et non un "torrent". Ce "canvas" est en soi une amélioration très significative du Contexte de Dispositif de Windows (Device Context ou DC - le hdc de ta picturebox, par exemple).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
130
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
28 janvier 2013

je comprend déjà mieux certaine chose, ...
néanmoins je vais changé de voie, et reprendre les chose où elle était au point de départ :
y a t'il plus rapide que StretchBlt, puisque c'est là ou je perd le plus de puissance, et encore plus maintenant, mais j'avance, j'avance ...