1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| Option Explicit
Private Sub Form_Load()
Form1.AutoRedraw = True: Form1.ScaleMode = vbPixels
ComboFormat.Clear
ComboFormat.AddItem "BMP": ComboFormat.AddItem "GIF": ComboFormat.AddItem "JPG"
ComboFormat.AddItem "PNG": ComboFormat.AddItem "TIF": ComboFormat.ListIndex = 2 'JPG
ComboFormat.Move 16, 4, 53
ComboQualiter.Clear
ComboQualiter.AddItem "Qualitée trés moyenne": ComboQualiter.ItemData(0) = 25
ComboQualiter.AddItem "Qualitée moyenne": ComboQualiter.ItemData(1) = 50
ComboQualiter.AddItem "Bonne qualitée": ComboQualiter.ItemData(2) = 75
ComboQualiter.AddItem "Tres bonne qualitée": ComboQualiter.ItemData(3) = 100
ComboQualiter.ListIndex = 3 'Tres bonne qualitée
ComboQualiter.Move 80, 4, 123
Command1.Caption = "Enregistrer": Command1.Move 212, 4, 73, 21
Picture1.AutoRedraw = True: Picture1.AutoSize = True: Picture1.ScaleMode = vbPixels
Picture1.Move 10, 32
Picture1.Picture = LoadPicture("C:\PersoFrancis\Manipuler une image\Image2.bmp")
Picture1.FontSize = 10: Picture1.FontBold = True
Picture1.Print
Picture1.Print " Essais en JPG"
Picture1.DrawWidth = 5
Picture1.Circle (Picture1.ScaleWidth / 2, Picture1.ScaleHeight / 2), Picture1.ScaleWidth / 3, vbGreen
Me.Height = Screen.Height / 2: Me.Width = Screen.Width / 2
End Sub
Private Sub Form_Initialize()
param.GdiplusVersion = 1
handle_session_gdiplus = 0
If GdiplusStartup(handle_session_gdiplus, param) <> 0 Then
MsgBox "Impossible d'initialiser GDIplus.DLL", vbInformation
End
End If
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If handle_session_gdiplus <> 0 Then
GdiplusShutdown handle_session_gdiplus 'libération explicite de l'espace mémoire
End If
End Sub
Private Sub Command1_Click()
CommonDialog1.Flags = cdlOFNExtensionDifferent + cdlOFNHideReadOnly + cdlOFNOverwritePrompt
CommonDialog1.Filter = ComboFormat.List(ComboFormat.ListIndex) & "|*." & ComboFormat.List(ComboFormat.ListIndex)
CommonDialog1.DefaultExt = "." & ComboFormat.List(ComboFormat.ListIndex)
CommonDialog1.CancelError = True
On Error Resume Next
CommonDialog1.ShowSave
If Err.Number <> 0 Then On Error GoTo 0: Exit Sub
Dim GraphHandle As Long 'zone graphique
Dim ImagHandle As Long 'image (pixels) contenu dans cette zone graphique
Dim ImagSave As Long 'image clone retaillé de ImagHandle
Dim FormatPixel As Long 'recuperation du format
Dim QualiteImg As Integer
Dim pixW As Long, pixH As Long 'pour tailler exactement à la partie interne du picture
Me.Caption = "En cours ....."
If GdipCreateFromHDC(Picture1.hdc, GraphHandle) = Gp_Ok Then
If GdipCreateBitmapFromHBITMAP(Picture1.image.Handle, Picture1.image.hpal, ImagHandle) = Gp_Ok Then
If GdipGetImagePixelFormat(ImagHandle, FormatPixel) = Gp_Ok Then
pixW = ScaleX(Picture1.ScaleWidth, Picture1.ScaleMode, vbPixels)
pixH = ScaleY(Picture1.ScaleHeight, Picture1.ScaleMode, vbPixels)
If GdipCloneBitmapAreaI(0, 0, pixW, pixH, FormatPixel, ImagHandle, ImagSave) = Gp_Ok Then
If SaveFileImage(CommonDialog1.FileName, ImagSave, _
ComboFormat.List(ComboFormat.ListIndex), _
ComboQualiter.ItemData(ComboQualiter.ListIndex)) = True Then
GdipDisposeImage ImagSave 'libération explicite de l'espace mémoire
Me.Caption = "OK"
End If
End If
End If
GdipDisposeImage ImagHandle 'libération explicite de l'espace mémoire
End If
GdipDeleteGraphics GraphHandle 'libération explicite de l'espace mémoire
End If
If Me.Caption = "En cours ....." Then
MsgBox "Sauvegarde non réalisée", , "-ProgElecT-"
Else
MsgBox "Fichier Sauvegardé : " & vbCrLf & CommonDialog1.FileName, , "-ProgElecT-"
End If
End Sub |
Partager