Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recup une image à partir picturebox

15 réponses
Avatar
mg
Salut,

J'ai récuper un pgm en VB6 qui permet de lire un mpeg dans un pictureBox.
je fais un stop sur le mpeg et le but est de recuperer l'image qui est dans
le PictureBox.
J'ai tt essayer
picturesave, paint,...mais à chaque fois jobtient des images vides.

Quelcun aura-t-il une idée pour récupérer l'image dans mon picturebox.

merci a tous.

10 réponses

1 2
Avatar
Zoury
Salut Mg ! :O)

Tu devras passer par les API GDI car le PictureBox ne sait même pas qu'il
affiche une image. :O)

Que dois-tu faire avec l'image ?

--
Cordialement
Yanick
MVP pour Visual Basic
"mg" a écrit dans le message de
news:4295ee1a$0$11704$
Salut,

J'ai récuper un pgm en VB6 qui permet de lire un mpeg dans un pictureBox.
je fais un stop sur le mpeg et le but est de recuperer l'image qui est


dans
le PictureBox.
J'ai tt essayer
picturesave, paint,...mais à chaque fois jobtient des images vides.

Quelcun aura-t-il une idée pour récupérer l'image dans mon picturebox.

merci a tous.





Avatar
mg
salut,
je doit recupere limage et la sauvegarder dans un fichier, en fait le but
est de faire une sorte de recuperation des images à partir du MPEG.
Si ta une autre solution, suis preneur.

merci

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Mg ! :O)

Tu devras passer par les API GDI car le PictureBox ne sait même pas qu'il
affiche une image. :O)

Que dois-tu faire avec l'image ?

--
Cordialement
Yanick
MVP pour Visual Basic
"mg" a écrit dans le message de
news:4295ee1a$0$11704$
> Salut,
>
> J'ai récuper un pgm en VB6 qui permet de lire un mpeg dans un


pictureBox.
> je fais un stop sur le mpeg et le but est de recuperer l'image qui est
dans
> le PictureBox.
> J'ai tt essayer
> picturesave, paint,...mais à chaque fois jobtient des images vides.
>
> Quelcun aura-t-il une idée pour récupérer l'image dans mon picturebox.
>
> merci a tous.
>
>
>




Avatar
mg
Désole, mais si ta bien lu mon message, jai tt essayer et sa marche pa dans
ce cas.
limage afficher nai pa recuper, jai un image vide.


"Pascal B." a écrit dans le message de news:

Salut

Pour récupérer l'image dans une PictureBox, il suffit d'utiliser
la propriéte (... roulement de tambourgs ...) Image.
(Je crois qu'il faut que la propriété AutoRedraw sois à True)

Ex:

Dim Pic as StdPicture
Set Pic = Picture1.Image
SavePicture Pic, "c:temptext.bmp"

Cordialement
Pascal B.


"mg" wrote in message


news:4295ee1a$0$11704$
| Salut,
|
| J'ai récuper un pgm en VB6 qui permet de lire un mpeg dans un


pictureBox.
| je fais un stop sur le mpeg et le but est de recuperer l'image qui est


dans
| le PictureBox.
| J'ai tt essayer
| picturesave, paint,...mais à chaque fois jobtient des images vides.
|
| Quelcun aura-t-il une idée pour récupérer l'image dans mon picturebox.
|
| merci a tous.
|
|
|




Avatar
mg
crois moi, que cette proprietate ne marche pas, si tu me crois pas, ta ka
essyer avec un mpeg et tu verra ke sa marche pas
si sa marche, tu pourra me faire une demo.

merci davance.

"Pascal B." a écrit dans le message de news:

(As-tu bien lu le mien au moins ?)

Cette methode fonctionne toujours; je ne connais pas de restrition à la


propriété Image de la PictureBox !
Le problème doit se situer ailleurs: il y a peut-etre un "On Error ..."


dans la procédure qui empeche de voir ce problème.

Pascal B.

"mg" wrote in message


news:
| Désole, mais si ta bien lu mon message, jai tt essayer et sa marche pa


dans
| ce cas.
| limage afficher nai pa recuper, jai un image vide.
|
|
| "Pascal B." a écrit dans le message de


news:
|
| > Salut
| >
| > Pour récupérer l'image dans une PictureBox, il suffit d'utiliser
| > la propriéte (... roulement de tambourgs ...) Image.
| > (Je crois qu'il faut que la propriété AutoRedraw sois à True)
| >
| > Ex:
| >
| > Dim Pic as StdPicture
| > Set Pic = Picture1.Image
| > SavePicture Pic, "c:temptext.bmp"
| >
| > Cordialement
| > Pascal B.
| >
| >
| > "mg" wrote in message
| news:4295ee1a$0$11704$
| > | Salut,
| > |
| > | J'ai récuper un pgm en VB6 qui permet de lire un mpeg dans un
| pictureBox.
| > | je fais un stop sur le mpeg et le but est de recuperer l'image qui


est
| dans
| > | le PictureBox.
| > | J'ai tt essayer
| > | picturesave, paint,...mais à chaque fois jobtient des images vides.
| > |
| > | Quelcun aura-t-il une idée pour récupérer l'image dans mon


picturebox.
| > |
| > | merci a tous.
| > |
| > |
| > |
| >
| >
|
|




Avatar
Zoury
Salut Pascal ! :O)

En fait, l'objet Image contient quelque chose si le PictureBox s'est vu
attribuer un objet Picture.
Hors la projection d'un MPEG dans un Picture sa fait via l'usage d'API qui
emploi le DC du PictureBox sans pour autant instancié l'objet Picture..
c'est pourquoi l'imagae sauvegarder via SavePicture() représente un
PictureBox vide.

--
Cordialement
Yanick
MVP pour Visual Basic
"Pascal B." a écrit dans le message de
news:
(As-tu bien lu le mien au moins ?)

Cette methode fonctionne toujours; je ne connais pas de restrition à la


propriété Image de la PictureBox !
Le problème doit se situer ailleurs: il y a peut-etre un "On Error ..."


dans la procédure qui empeche de voir ce problème.

Pascal B.

"mg" wrote in message


news:
| Désole, mais si ta bien lu mon message, jai tt essayer et sa marche pa


dans
| ce cas.
| limage afficher nai pa recuper, jai un image vide.
|
|
| "Pascal B." a écrit dans le message de


news:
|
| > Salut
| >
| > Pour récupérer l'image dans une PictureBox, il suffit d'utiliser
| > la propriéte (... roulement de tambourgs ...) Image.
| > (Je crois qu'il faut que la propriété AutoRedraw sois à True)
| >
| > Ex:
| >
| > Dim Pic as StdPicture
| > Set Pic = Picture1.Image
| > SavePicture Pic, "c:temptext.bmp"
| >
| > Cordialement
| > Pascal B.
| >
| >
| > "mg" wrote in message
| news:4295ee1a$0$11704$
| > | Salut,
| > |
| > | J'ai récuper un pgm en VB6 qui permet de lire un mpeg dans un
| pictureBox.
| > | je fais un stop sur le mpeg et le but est de recuperer l'image qui


est
| dans
| > | le PictureBox.
| > | J'ai tt essayer
| > | picturesave, paint,...mais à chaque fois jobtient des images vides.
| > |
| > | Quelcun aura-t-il une idée pour récupérer l'image dans mon


picturebox.
| > |
| > | merci a tous.
| > |
| > |
| > |
| >
| >
|
|




Avatar
Pascal B.
Salut

Pour récupérer l'image dans une PictureBox, il suffit d'utiliser
la propriéte (... roulement de tambourgs ...) Image.
(Je crois qu'il faut que la propriété AutoRedraw sois à True)

Ex:

Dim Pic as StdPicture
Set Pic = Picture1.Image
SavePicture Pic, "c:temptext.bmp"

Cordialement
Pascal B.


"mg" wrote in message news:4295ee1a$0$11704$
| Salut,
|
| J'ai récuper un pgm en VB6 qui permet de lire un mpeg dans un pictureBox.
| je fais un stop sur le mpeg et le but est de recuperer l'image qui est dans
| le PictureBox.
| J'ai tt essayer
| picturesave, paint,...mais à chaque fois jobtient des images vides.
|
| Quelcun aura-t-il une idée pour récupérer l'image dans mon picturebox.
|
| merci a tous.
|
|
|
Avatar
mg
Oui, mais sa me dit pas comment faire pour recuperer l'image du Picturebox
tt ça.

merci qd meme

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:
Salut Pascal ! :O)

En fait, l'objet Image contient quelque chose si le PictureBox s'est vu
attribuer un objet Picture.
Hors la projection d'un MPEG dans un Picture sa fait via l'usage d'API qui
emploi le DC du PictureBox sans pour autant instancié l'objet Picture..
c'est pourquoi l'imagae sauvegarder via SavePicture() représente un
PictureBox vide.

--
Cordialement
Yanick
MVP pour Visual Basic
"Pascal B." a écrit dans le message de
news:
> (As-tu bien lu le mien au moins ?)
>
> Cette methode fonctionne toujours; je ne connais pas de restrition à la
propriété Image de la PictureBox !
> Le problème doit se situer ailleurs: il y a peut-etre un "On Error ..."
dans la procédure qui empeche de voir ce problème.
>
> Pascal B.
>
> "mg" wrote in message
news:
> | Désole, mais si ta bien lu mon message, jai tt essayer et sa marche pa
dans
> | ce cas.
> | limage afficher nai pa recuper, jai un image vide.
> |
> |
> | "Pascal B." a écrit dans le message de
news:
> |
> | > Salut
> | >
> | > Pour récupérer l'image dans une PictureBox, il suffit d'utiliser
> | > la propriéte (... roulement de tambourgs ...) Image.
> | > (Je crois qu'il faut que la propriété AutoRedraw sois à True)
> | >
> | > Ex:
> | >
> | > Dim Pic as StdPicture
> | > Set Pic = Picture1.Image
> | > SavePicture Pic, "c:temptext.bmp"
> | >
> | > Cordialement
> | > Pascal B.
> | >
> | >
> | > "mg" wrote in message
> | news:4295ee1a$0$11704$
> | > | Salut,
> | > |
> | > | J'ai récuper un pgm en VB6 qui permet de lire un mpeg dans un
> | pictureBox.
> | > | je fais un stop sur le mpeg et le but est de recuperer l'image qui
est
> | dans
> | > | le PictureBox.
> | > | J'ai tt essayer
> | > | picturesave, paint,...mais à chaque fois jobtient des images


vides.
> | > |
> | > | Quelcun aura-t-il une idée pour récupérer l'image dans mon
picturebox.
> | > |
> | > | merci a tous.
> | > |
> | > |
> | > |
> | >
> | >
> |
> |
>
>




Avatar
Pascal B.
(As-tu bien lu le mien au moins ?)

Cette methode fonctionne toujours; je ne connais pas de restrition à la propriété Image de la PictureBox !
Le problème doit se situer ailleurs: il y a peut-etre un "On Error ..." dans la procédure qui empeche de voir ce problème.

Pascal B.

"mg" wrote in message news:
| Désole, mais si ta bien lu mon message, jai tt essayer et sa marche pa dans
| ce cas.
| limage afficher nai pa recuper, jai un image vide.
|
|
| "Pascal B." a écrit dans le message de news:
|
| > Salut
| >
| > Pour récupérer l'image dans une PictureBox, il suffit d'utiliser
| > la propriéte (... roulement de tambourgs ...) Image.
| > (Je crois qu'il faut que la propriété AutoRedraw sois à True)
| >
| > Ex:
| >
| > Dim Pic as StdPicture
| > Set Pic = Picture1.Image
| > SavePicture Pic, "c:temptext.bmp"
| >
| > Cordialement
| > Pascal B.
| >
| >
| > "mg" wrote in message
| news:4295ee1a$0$11704$
| > | Salut,
| > |
| > | J'ai récuper un pgm en VB6 qui permet de lire un mpeg dans un
| pictureBox.
| > | je fais un stop sur le mpeg et le but est de recuperer l'image qui est
| dans
| > | le PictureBox.
| > | J'ai tt essayer
| > | picturesave, paint,...mais à chaque fois jobtient des images vides.
| > |
| > | Quelcun aura-t-il une idée pour récupérer l'image dans mon picturebox.
| > |
| > | merci a tous.
| > |
| > |
| > |
| >
| >
|
|
Avatar
Pascal B.
Je comprend mieux (j'ai relis ton 1er message)
Mais tu as parlé de PICTUREBOX et il est impossible de lire un MPEG (Vidéo) dans ce type de controle.
Il sagit donc d'un autre controle (non standard).
Il est donc difficile de t'aider si on ne connait pas ce controle !

Pascal Bral


"mg" wrote in message news:
| crois moi, que cette proprietate ne marche pas, si tu me crois pas, ta ka
| essyer avec un mpeg et tu verra ke sa marche pas
| si sa marche, tu pourra me faire une demo.
|
| merci davance.
|
| "Pascal B." a écrit dans le message de news:
|
| > (As-tu bien lu le mien au moins ?)
| >
| > Cette methode fonctionne toujours; je ne connais pas de restrition à la
| propriété Image de la PictureBox !
| > Le problème doit se situer ailleurs: il y a peut-etre un "On Error ..."
| dans la procédure qui empeche de voir ce problème.
| >
| > Pascal B.
| >
| > "mg" wrote in message
| news:
| > | Désole, mais si ta bien lu mon message, jai tt essayer et sa marche pa
| dans
| > | ce cas.
| > | limage afficher nai pa recuper, jai un image vide.
| > |
| > |
| > | "Pascal B." a écrit dans le message de
| news:
| > |
| > | > Salut
| > | >
| > | > Pour récupérer l'image dans une PictureBox, il suffit d'utiliser
| > | > la propriéte (... roulement de tambourgs ...) Image.
| > | > (Je crois qu'il faut que la propriété AutoRedraw sois à True)
| > | >
| > | > Ex:
| > | >
| > | > Dim Pic as StdPicture
| > | > Set Pic = Picture1.Image
| > | > SavePicture Pic, "c:temptext.bmp"
| > | >
| > | > Cordialement
| > | > Pascal B.
| > | >
| > | >
| > | > "mg" wrote in message
| > | news:4295ee1a$0$11704$
| > | > | Salut,
| > | > |
| > | > | J'ai récuper un pgm en VB6 qui permet de lire un mpeg dans un
| > | pictureBox.
| > | > | je fais un stop sur le mpeg et le but est de recuperer l'image qui
| est
| > | dans
| > | > | le PictureBox.
| > | > | J'ai tt essayer
| > | > | picturesave, paint,...mais à chaque fois jobtient des images vides.
| > | > |
| > | > | Quelcun aura-t-il une idée pour récupérer l'image dans mon
| picturebox.
| > | > |
| > | > | merci a tous.
| > | > |
| > | > |
| > | > |
| > | >
| > | >
| > |
| > |
| >
| >
|
|
Avatar
Zoury
> Oui, mais sa me dit pas comment faire pour recuperer l'image du Picturebox
tt ça.



hehe ! patience ! :O)

Je t'ai fais un petit exemple qui sauvegarde un Bitmap de 24bits sur le
disque.

Au démarrage du programme, un screenshot du systray est copié dans le
picture. Il ne te reste qu'à appuyer sur sur "Sauvegarder" pour créer
l'image.
'***
' Form 1
' 1 PictureBox
' 1 CommandButton
' 1 Timer
Option Explicit

' Constante désignant "BM" pour l'entête du fichier
Private Const BMP_MAGIC_COOKIE = &H4D42

' Information relative à l'entête du bitmap
Private Type BITMAPINFOHEADER '40 bytes
biSize As Long
blWidth As Long
blHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type

' Information relative à l'entête du fichier
Private Type BITMAPFILEHEADER '14 bytes
bfType As Integer
bfSize As Long
bfReserved1 As Integer
bfReserved2 As Integer
bfOffBits As Long
End Type

Private Declare Function FindWindow _
Lib "user32" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function PrintWindow _
Lib "user32" ( _
ByVal hWnd As Long, _
ByVal hdcBlt As Long, _
ByVal nFlags As Long) As Long

Private Declare Function CreateCompatibleDC _
Lib "gdi32" ( _
ByVal hDC As Long) As Long

Private Declare Function CreateCompatibleBitmap _
Lib "gdi32" ( _
ByVal hDC As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long) As Long

Private Declare Function BitBlt _
Lib "gdi32" ( _
ByVal hDestDc As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal dwRop As Long) As Long

Private Declare Function GetDIBits _
Lib "gdi32" _
( _
ByVal hDC As Long, _
ByVal hBitmap As Long, _
ByVal nStartScan As Long, _
ByVal nNumScans As Long, _
ByRef lpBits As Any, _
ByRef lpBI As BITMAPINFOHEADER, _
ByVal wUsage As Long _
) As Long

Private Declare Function SelectObject _
Lib "gdi32" ( _
ByVal hDC As Long, _
ByVal hObject As Long) As Long

Private Declare Function DeleteObject _
Lib "gdi32" ( _
ByVal hObject As Long) As Long

Private Declare Function DeleteDC _
Lib "gdi32" ( _
ByVal hDC As Long) As Long

Private Sub Form_Load()

Call Me.Move(Me.Left, Me.Top, 6525, 1725)
Call Picture1.Move(120, 120, 6135, 495)
Call Command1.Move(4800, 720, 1465, 375)

Timer1.Interval = 10

Command1.Enabled = False
Command1.Caption = "&Sauvegarder"

Me.ScaleMode = vbPixels
Me.Caption = "Démo de sauvegarde d'image"

Picture1.ScaleMode = vbPixels
Picture1.AutoRedraw = False

End Sub

Private Sub Timer1_Timer()

Timer1.Enabled = False
Command1.Enabled = True
Call PrintWindow(FindWindow("Shell_TrayWnd", vbNullString),
Picture1.hDC, 0)

End Sub

Private Sub Command1_Click()

Const FILE_NAME As String = "c:picture1.bmp"
Call SavePictureBoxToBMP(Picture1.hDC, 0, 0, Picture1.ScaleWidth,
Picture1.ScaleHeight, FILE_NAME)
Call Shell("mspaint """ & FILE_NAME & """", vbNormalFocus)

End Sub

Public Sub SavePictureBoxToBMP( _
ByRef hDCSrc As Long, _
ByRef lPosX As Long, _
ByRef lPosY As Long, _
ByRef lWidth As Long, _
ByRef lHeight As Long, _
ByRef sFileName As String)

Dim hDC As Long
Dim hDIB As Long
Dim hOldDIB As Long
Dim biHeader As BITMAPINFOHEADER
Dim lScanLine As Long
Dim byDIB() As Byte

' initialise notre DC
hDC = CreateCompatibleDC(hDCSrc)
hDIB = CreateCompatibleBitmap(hDCSrc, lWidth, lHeight)
hOldDIB = SelectObject(hDC, hDIB)

' copie le contenu du DCSrc dans notre DC
Call BitBlt(hDC, 0, 0, lWidth, lHeight, hDCSrc, lPosX, lPosY, vbSrcCopy)

' obtient l'entete du bitmap
biHeader = CreateBIHeader(lWidth, lHeight, byDIB)

' obtient les octets du DIB
Call GetDIBits(hDC, hDIB, 0, lHeight, byDIB(0, 0), biHeader, 0)

' sauvegarde le fichier
Call SaveFileAs(sFileName, biHeader, CreateBFHeader(biHeader), byDIB)

' Libère les ressources
Call SelectObject(hDC, hOldDIB)
Call DeleteObject(hDIB)
Call DeleteDC(hDC)

End Sub

Private Function CreateBIHeader( _
ByRef lWidth As Long, _
ByRef lHeight As Long, _
ByRef byDIB() As Byte) As BITMAPINFOHEADER

Dim lScanLine As Long

' prépare notre entete de bitmap
With CreateBIHeader
.biSize = Len(CreateBIHeader)
.biBitCount = 24
.biPlanes = 1
.blHeight = lHeight
.blWidth = lWidth
lScanLine = (((.blWidth * .biBitCount) + &H1F) And Not &H1F) &H8
.biSizeImage = lScanLine * .blHeight
ReDim byDIB(lScanLine - 1, CreateBIHeader.blHeight - 1) As Byte
End With

End Function

Private Function CreateBFHeader(ByRef biHeader As BITMAPINFOHEADER) As
BITMAPFILEHEADER

' initialise l'entete du fichier
With CreateBFHeader
.bfType = BMP_MAGIC_COOKIE
.bfOffBits = Len(CreateBFHeader) + Len(biHeader)
.bfSize = .bfOffBits + biHeader.biSizeImage
End With

End Function

Private Function SaveFileAs( _
ByRef sFileName As String, _
ByRef biHeader As BITMAPINFOHEADER, _
ByRef bfHeader As BITMAPFILEHEADER, _
ByRef byDIB() As Byte) As Boolean

Dim hFile As Long

' supprime le fichier s'il existe déjà
If (FileExists(sFileName)) Then
Call Kill(sFileName)
End If

' sauvegarde l'image dans le fichier
hFile = FreeFile
Open sFileName For Binary As #hFile
Put #hFile, , bfHeader
Put #hFile, , biHeader
Put #hFile, , byDIB
Close #hFile

End Function

Private Function FileExists(ByRef sFileName As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(sFileName) And vbDirectory) = 0)
End Function
'***

--
Cordialement
Yanick
MVP pour Visual Basic
1 2