Les Snippets

Connexion

Etirer une image proportionnellement, au centre d'un contrôle, en limitant à une taille maximum

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 13/10/2008 18:24:35 et initié par PCPT [Liste]
Date de mise à jour : 13/10/2008 18:33:01
Vue : 402
Catégorie(s) : Graphique, Control
Langages dispo pour ce code :
- VB6



Langage : VB6
Date ajout : 13/10/2008
Posté par PCPT [Liste]
DateMAJ : 13/10/2008
Sub Stretch(ByRef oDest As Object, sPath As String, Optional ByVal lMaxWidth As Long = 0,  Optional ByVal lMaxHeight As Long = 0)
'oDest      control avec hDC classique (propriétés hDC, Width,  Height, ScaleX-Y, PaintPicture), doit être en twips
'lMaxWidth  largeur max, celle du control par  défaut
'lMaxHeight hauteur max, celle du control  par défaut
    Dim lOldWidth   As Long
    Dim lOldHeight  As Long
    Dim lNewWidth   As Long
    Dim lNewHeight  As Long
    Dim cRatio      As Currency
    Dim oStd        As New StdPicture
    
    
'    régule la taille MAX par défaut
    If (lMaxWidth <= 0Or (lMaxWidth > oDest.Width)  Then lMaxWidth =  oDest.Width
    If (lMaxHeight <= 0Or (lMaxHeight > oDest.Height) Then  lMaxHeight = oDest.Height
'   charge l'image et récupère sa taille
    Set oStd = LoadPicture(sPath)
    lOldWidth = oDest.ScaleX(oStd.Width, vbHimetric,  vbTwips)
    lOldHeight = oDest.ScaleY(oStd.Height, vbHimetric,  vbTwips)
'   orientation, on va étirer l'image  au plus possible en touchant la taille max autorisée avec le bord du type  d'image. l'autre côté peut tout de même dépasser
    If lOldWidth > lOldHeight Then
'       image réelle :  paysage
        lNewWidth = lMaxWidth
        cRatio = lMaxWidth / lOldWidth
        lNewHeight = lOldHeight * cRatio
        If lNewHeight > lMaxHeight Then
'           la hauteur dépasse,  même manip
            cRatio = lMaxHeight / lNewHeight
            lNewHeight = lMaxHeight
            lNewWidth = lNewWidth * cRatio
        End If
    Else
'       image réelle : portrait
        lNewHeight = lMaxHeight
        cRatio = lMaxHeight / lOldHeight
        lNewWidth = lOldWidth * cRatio
        If lNewWidth > lMaxWidth Then
'           la largeur dépasse,  même manip
            cRatio = lMaxWidth / lNewWidth
            lNewWidth = lMaxWidth
            lNewHeight = lNewHeight * cRatio
        End If
    End If
'   on dessine le rendu  centré (NB : l'API StretchBlt donne une trop mauvaise qualité, autant passer par  la méthode accessible par le contrôle)
    oDest.PaintPicture oStd, (oDest.Width - lNewWidth) / 2, (oDest.Height - lNewHeight) /  2, lNewWidth, lNewHeight,  0, 0, lOldWidth, lOldHeight,  vbSrcCopy
    Set oStd = Nothing
End Sub

'  =====================
' EXEMPLE  D'UTILISATION
'  =====================
'
Private Sub Command1_Click()
'   par exemple sur  une picturebox sans bordure, avec l'autoredraw
    Picture1.BorderStyle = vbBSNone
    Picture1.AutoRedraw = True
    Picture1.BackColor = vbRed

'   nettoyer si ncéssaire
    Picture1.Cls
'   Picture1 : on  étire l'image en gardant la proportion, sur la taille TOTALE de la  box
    Call Stretch(Picture1, "C:\image1.jpg")
'   Picture1 (aussi !!) : on étire l'image en gardant la  proportion, sur la MOITIé de la box (toujours en son centre)
    Call Stretch(Picture1, "C:\image1.jpg", Picture1.Width / 2, Picture1.Height / 2)
End Sub

Remarque :
ce code permet d'étirer une image au centre d'un contrôle en conservant les proportions d'origines.
lMaxWidth et lMaxHeight étant optionnels, vous pouvez également jouer pour, par exemple, dessiner ensuite une bordure sur votre contrôle sans mordre sur le rendu.

Snippets en rapport avec : Image, Centrer, Étirer, Stretch, Proportion



Codes sources en rapport avec : Image, Centrer, Étirer, Stretch, Proportion

{Visual Basic, VB6, VB.NET, VB 2005} REDIMENTIONNER CONTROLE IMAGE EN CONSERVANT LES PROPORTIONS
Ce code permet simplement de centrer son image ajuster et centrer avec UN SEUL control IMAGE, pour ...

{Flash} RETAILLER UNE IMAGE EN CONSERVANT SES PROPORTIONS
Bonjour les Amis !! Voici une petite source qui permet de redimensionner une image en conservant se...

{JAVA / J2EE} TÉLÉCHARGEMENT D'IMAGES (POCHETTES CD, DVD, LIVRES...) SUR INTERNET
Petite fonction permettant de télécharger des images de cds, bd, livres, dvd, films, affiches par r...

{ASP / ASP.NET} IMAGE : GARDER LA RESOLUTION SI LA TAILLE NE DEPASSE PAS LE MAXIMUM DEFINIT...
Dans le cas de galleries d'images par exemple on peut être amené à afficher une image dans un cadre ...

{ASP / ASP.NET} ASP.NET - COMMENT CRÉER UNE IMAGE DE TAILLE PLUS RÉDUITE EN CONSERVANT LA QUALITÉ MAXIMUM
A partir de l'idée de la source : - http://www.aspfr.com/code.aspx?ID=9088 et de la classe prop...

{JAVA / J2EE} FAIRE DEFILER UNE IMAGE
...

{C# / C#.NET} REDIMENSIONNEMENT DE DOCUMENTS SCANNÉS POUR MAILS
L'objectif de ce projet était de fournir une application très simple pour ma famille afin qu'ils pui...

{Visual Basic, VB6, VB.NET, VB 2005} BLOC NOTE DU PROGRAMMEUR
Comme son nom l'indique, il sert à répertorier les notes, le code et les images de tous les projets ...

{Visual Basic, VB6, VB.NET, VB 2005} RENOMMER FICHIERS AVEC VIEWER
Sert à trier des photos à l'aide d'un viewer,les classer, les renommer pour l'exécution d'un diapora...

{Visual Basic, VB6, VB.NET, VB 2005} MENU POPUP AVEC IMAGE
Placer des bitmaps 16*16 pixel dans les menus standards et popup des forms. J'ai essayé d'utilis...