Loading...

Peut-on faire 2 resize consécutifs?

Support for GdPicture Light Imaging Toolkit and GdPicture Pro Imaging ActiveX/SDK.

Peut-on faire 2 resize consécutifs?

Postby tAkAmAkA » Mon Jun 22, 2009 1:10 am

Bonjour Loïc,

J'essaye de placer une image sur un document A4 en respectant des marges mais je butte sur la façon de faire un redimensionnement dans les deux sens de l'image et donc je me demande si il est possible (et comment) faire deux resize consecutifs (ResizeHeightRatio et ResizeWidthRatio). Je code que j'ai écris ne me fait que le premier, est - ce normal?
Code: Select all
If nImageId <> 0 Then
            Select Case sSens
                Case "P", "p"
                    nHauteurNew = 3508: nLargeurNew = 2481
                    nMargeG = nMargePG: nMargeD = nMargePD: nMargeH = nMargePH: nMargeB = nMargePB
                Case "L", "l"
                    nHauteurNew = 2481: nLargeurNew = 3508
                    nMargeG = nMargeLG: nMargeD = nMargeLD: nMargeH = nMargeLH: nMargeB = nMargeLB
                End Select
                Call Imaging1.ResizeWidthRatio(nLargeurNew - nMargeD - nMargeG, 7)
                nHauteurRzd = Imaging1.GetHeight()
                Call Imaging1.ResizeHeightRatio(nHauteurNew - nMargeH - nMargeB, 7)
                nLargeurRzd = Imaging1.GetWidth()
                nImageA4 = Imaging1.CreateNewImage(nLargeurNew, nHauteurNew, 32, Imaging1.argb(255, 10, 10, 10))
                Call Imaging1.SetVerticalResolution(300)
                Call Imaging1.SetHorizontalResolution(300)
                        If nImageA4 <> 0 Then
                            Imaging1.SetNativeImage (nImageA4)
                        Else
                            MsgBox "nImageA4 non créée.", vbExclamation, "xxx"
                        End If
               'centrage vertical
               nMargeH = (nHauteurNew - nHauteurRzd) / 2
               'centrage horizontal
               nMargeG = (nLargeurNew - nLargeurRzd) / 2
               'Call Imaging1.DrawImage(nImageId, nMargeG, nMargeH, nLargeurNew - nMargeD - nMargeG, nHauteurRzd, 7)
               Call Imaging1.DrawImage(nImageId, nMargeG, nMargeH, nLargeurRzd, nHauteurRzd, 7)                   
           
           Select Case sExtension
                Case "tif", "tiff"
                    Call Imaging1.convertto1bpp
                    Call Imaging1.SaveAstiff(sChemin, 4)   '4:CCITT g4
                Case "jpg", "jpeg"
                    Call Imaging1.ConvertTo8BppGrayScaleAdv
                    Call Imaging1.SaveAsJPEG(sChemin, nCompJpg)
            End Select
            Call Imaging1.closenativeimage
      fctMiseA4Marges = True
Else
      fctMiseA4Marges = False
End If

Merci de votre aide.
Jissé
Last edited by tAkAmAkA on Mon Jun 22, 2009 4:30 am, edited 1 time in total.
tAkAmAkA
 
Posts: 54
Joined: Mon Oct 27, 2008 6:38 pm

Re: Peut-on faire 2 resize consécutifs?

Postby tAkAmAkA » Mon Jun 22, 2009 4:29 am

Finalement je suis arrivé à une solution plus simple et plus naturelle:
Code: Select all
f nImageId <> 0 Then

             nRatio = Imaging1.GetWidth() / Imaging1.GetHeight()

            nLargeurRzd = nLargeurA4 - nMargeD - nMargeG
            nHauteurRzd = nLargeurRzd / nRatio
            'test hauteur
             If nHauteurRzd > nHauteurA4 - nMargeH - nMargeB Then
                            nHauteurRzd = nHauteurA4 - nMargeH - nMargeB
                            nLargeurRzd = nHauteurRzd * nRatio
             End If
             nImageA4 = Imaging1.CreateNewImage(nLargeurA4, nHauteurA4, 32, Imaging1.argb(255, 10, 10, 10))
             Call Imaging1.SetVerticalResolution(300)
             Call Imaging1.SetHorizontalResolution(300)
             If nImageA4 <> 0 Then
                            Imaging1.SetNativeImage (nImageA4)
             Else
                            MsgBox "nImageA4 non créée.", vbExclamation, "xxx"
            End If
            'centrage vertical
            If (nHauteurA4 - nHauteurRzd) / 2 > nMargeH Then nMargeH = (nHauteurA4 - nHauteurRzd) / 2
            'centrage horizontal
             If (nLargeurA4 - nLargeurRzd) / 2 > nMargeG Then nMargeG = (nLargeurA4 - nLargeurRzd) / 2
                       
             Call Imaging1.DrawImage(nImageId, nMargeG, nMargeH, nLargeurRzd, nHauteurRzd, 7)

Comme ça, ça me va.
Si il y a plus rapide je suis preneur car j'ai plusieurs dizaines de milliers d'images à traiter.

Cordialement
(Et encore merci pour cette bombe de la balle qui tue qu'est GdPicture Pro!)
Jissé
tAkAmAkA
 
Posts: 54
Joined: Mon Oct 27, 2008 6:38 pm


Return to GdPicture [Pro] ActiveX

Who is online

Users browsing this forum: No registered users and 1 guest