HELP : Enregistrer une image JPG ou MPG via du code

Signaler
Messages postés
47
Date d'inscription
lundi 5 janvier 2004
Statut
Membre
Dernière intervention
2 septembre 2011
-
Messages postés
47
Date d'inscription
lundi 5 janvier 2004
Statut
Membre
Dernière intervention
2 septembre 2011
-
Bonjour à tous,

Voilà mon pb.
Je récupère une image à un endroit donné pour l'enregistrer dans un autre ; mais je ne sais pas comment (ligne de commande) redimensionner mon image avant de l'enregistrer

Est-ce que quelqu'un à la solution ??

Merci d'avance

:shy) VinyDev

6 réponses

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
PictureBox.PaintPicture(Picture, X1, Y1, [Width1], [Height1], [X2], [Y2], [Width2], [Height2])

Picture permet de définir l'image que vous désirez peindre
X1, Y1 définissent les coordonnées par rapport à l'origine où sera placé l'angle haut gauche de l'image à peindre dans le contrôle.
Width1, Height1 permettent de définir la taille de l'image peinte, vous pouvez ainsi la redimensionner selon les besoins.
X2, Y2 représentent les coordonnée dans l'image originale à partir desquelles l'image sera copier, cela permet ainsi de faire un découpage et ne garder qu'une partie d' 'image.
Width2, Height2 permettent de définir la taille de la découpe à partie des coordonnée X2,Y2 dans l'image à peindre.
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
Fonction StretchBlt

Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" ( _
ByVal hdc 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 nSrcWidth As Long, _
ByVal nSrcHeight As Long, _
ByVal dwRop As Long) As Long

Cette fonction permet de redimensionner une image, et elle a le même effet que la propriété Stretch (=Vraie) d'un contrôle Image. Mais la propriété Stretch n'existe pas pour les contrôles Picture, c'est pourquoi il est intéressant de connaître cette API.

Contrôle récepteur :
hDC est le handle du contrôle qui reçoit l'image.
X, Y, nWidth et nHeight définissent le rectangle dans lequel l'image source s'insérera.

Contrôle source :
hSrcDC est le handle du contrôle source.
XSrc, YSrc, nSrcWidth, nSrcHeight définissent le rectangle de l'image source (cela peut-être le contrôle complet une portion).

La constante :
dwRop définit l'opération à effectuer
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
VB vous permet aussi de sauvegarder les images simplement à l'aide d'une commande semblable à LoadPicture, il s'agit de :
SavePicture(Picture As IPictureDisp, FileName As String)
Picture correspond à l'image que vous désirez enregistrer et FileName au fichier dans lequel vous voulez sauvegarder l'image.

Pour sauvegarder une image vous devez procéder ainsi :

Call SavePicture(Picture1.Picture, strChemin)
Messages postés
47
Date d'inscription
lundi 5 janvier 2004
Statut
Membre
Dernière intervention
2 septembre 2011

merci à toi,

mais je ne sais pas comment utiliser l'API dans mon code ; je suis un peu novice en vb

Peux-tu me montrer ?

:shy) VinyDev
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
31
Exemple d 'utilisation : Zoom d'une image

' A mettre dans un module...
Public Const SRCCOPY = &HCC0020
Public Declare Function StretchBlt Lib "gdi32.dll" ( _
        ByVal hDC 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 nSrcWidth As Long, _
        ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long


' A mettre dans une feuille...
Private Sub Form_Load()
' Picture1: mettre propriété AutoSize à True
' Picture2: mettre propriété AutoRedraw à True
' Mettre propriété Appearance à 0 (plat) et BorderStyle à 0 (Aucun) pour les deux contrôles Image.
' ---Initialisation---
Picture1.ScaleMode = vbPixels
Picture2.ScaleMode = vbPixels
Me.ScaleMode = vbPixels
' Charger une image dans Picture1
Picture1.Picture = LoadPicture("C:\IMAGES\01.BMP")
End Sub

Private Sub CmdAfficher_Click()
' ---Déclaration des variables---
Dim Ret     As Long
Dim Hauteur As Long
Dim Largeur As Long
Dim Zoom    As Single
' ---Définir le ratio
Zoom = 0.50
Hauteur = CLng(Zoom * Picture1.Height)
Largeur = CLng(Zoom * Picture1.Width)
' ---COPIER la bitmap de la zone d'image source---
With Picture2
    .Width = Largeur
    .Height = Hauteur
End With
Ret = StretchBlt(Picture2.hDC, 0, 0, Largeur, Hauteur, _
                 Picture1.hDC, 0, 0, Picture1.Width, Picture1.Height, _
                 SRCCOPY)
Picture2.Picture = Picture2.Image
End Sub
Messages postés
47
Date d'inscription
lundi 5 janvier 2004
Statut
Membre
Dernière intervention
2 septembre 2011

Merci beaucoup pour ton aide

:shy) VinyDev