JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Zoom sur une portion d'écran Lun 20 Nov 2017 - 19:51 | |
| Rien de révolutionnaire, le but était de capturer et/ou zoomer sur une partie d'écran, avec possibilité de pivoter la capture par bonds de 90°. Contrainte: il faut disposer de la ressource externe IrfanView, traitement d'images (freeware évidemment) aux multiples possibilités, dont le grand intérêt pour nous est de fonctionner également en ligne de commande, donc appelé de manière transparente depuis un programme en Panoramic. La fonction utilisée ici est la fonction capture d'écran. Le programme est destiné à être compilé et mis en icône sur le bureau. Au lancement, seule une croix s'affiche sur l'écran, qu'on déplace à la souris, clic sur le point en haut à gauche, puis déplacement et clic sur le point en bas à droite de la capture. La fenêtre Panoramic n'apparaît qu'à ce moment, capture effectuée. La capture est affichée dans un picture (agrandie x2, c'est un choix arbitraire). On peut l'agrandir, la diminuer, la faire pivoter par bonds successifs de 90°, et l'enregistrer dans le presse-papier. Pour la petite histoire, la rotation c'est pour quand je reçois des photos dans des emails, prises avec un smartphone, elles sont systématiquement pivotées de 90°, parfois même carrément à l'envers ! Pour le zoom, ça peut être utile sur certains sites web pour agrandir une zone ou un détail trop petit. - Code:
-
' Zoom d'une zone de l'écran. ' Sélection: ' - en déplaçant la souris, amener la croix au coin supérieur gauche désiré, cliquer, ' puis au coin inférieur droit, cliquer: la zone capturée s'affiche en haut à gauche. LABEL Termin,Afi,Zoom,Rot,Copyclip DIM iv$,fr$,fm$,wbm,hbm,w0,h0,v%(10),zmx,i,wmin%,a$ iv$ = "C:\Progra~2\Irfanv~1\i_view64.exe ": ' Chemin de IrfanView fr$ = "C:\Temp\Temp.bmp" fm$ = "C:\Temp\Img.bmp"
BORDER_HIDE 0: HIDE 0: FONT_NAME 0,"Arial": FONT_BOLD 0: FONT_SIZE 0,12 COLOR 0,180,180,180 ALPHA 10: LEFT 10,0: COLOR 10,255,255,0 BUTTON 11: HEIGHT 11,19: WIDTH 11,50: LEFT 11,140: CAPTION 11,"Zm +" BUTTON 12: HEIGHT 12,19: WIDTH 12,50: LEFT 12,LEFT(11)+WIDTH(11): CAPTION 12,"Zm -" ON_CLICK 11,Zoom: ON_CLICK 12,Zoom BUTTON 13: HEIGHT 13,19: WIDTH 13,30: LEFT 13,LEFT(12)+WIDTH(12): CAPTION 13,CHR$(81) BUTTON 14: HEIGHT 14,19: WIDTH 14,WIDTH(13): LEFT 14,LEFT(13)+WIDTH(13): CAPTION 14,CHR$(80) FOR i = 13 TO 14: FONT_NAME i,"Wingdings 3": ON_CLICK i,Rot: NEXT i BUTTON 15: HEIGHT 15,19: WIDTH 15,60: LEFT 15,LEFT(14)+WIDTH(14): CAPTION 15,"-> Clip" ON_CLICK 15,Copyclip BUTTON 16: HEIGHT 16,19: WIDTH 16,60: LEFT 16,LEFT(15)+WIDTH(15): CAPTION 16,"Quitter" ON_CLICK 16,Termin wmin% = LEFT(16)+WIDTH(16): ' largeur minimum de Form 0 PICTURE 1: TOP 1,20: STRETCH_ON 1 zmx = 2: ' zoom initial EXECUTE_WAIT iv$+"/capture=4 /convert="+fr$: ' Capture par IrfanView IF FILE_EXISTS(fr$)=0 THEN TERMINATE FILEBIN_OPEN_READ 1, fr$ FILEBIN_POSITION 1, 18: FILEBIN_BLOCK_READ 1,8,v%(0) wbm = v%(0)+256*v%(1)+65536*v%(2)+16777216*v%(3): ' largeur sélection en pixels hbm = v%(4)+256*v%(5)+65536*v%(6)+16777216*v%(7): ' hauteur sélection en pixels FILEBIN_CLOSE 1 SHOW 0 GOSUB Afi END ' ============================================================================== Termin: FILE_DELETE fr$ TERMINATE ' ============================================================================== Afi: w0 = wbm*zmx: h0 = hbm*zmx+20 IF w0 < wmin% THEN w0 = wmin% WIDTH 0,w0: HEIGHT 0,h0: TOP 1,18: WIDTH 1,wbm*zmx: HEIGHT 1,hbm*zmx FILE_LOAD 1,fr$ CAPTION 10, " "+STR$(wbm)+" x "+STR$(hbm)+" ("+STR$(zmx)+"x) " RETURN ' ============================================================================== Zoom: IF CLICKED(11)=1: ' zoom avant zmx = zmx+1 ELSE: ' zoom arrière zmx = zmx-1: IF zmx < 1 THEN zmx = 1 END_IF GOSUB Afi RETURN ' ============================================================================== Rot: IF CLICKED(13) = 1 a$ = "L": ' rotation de 90° à gauche ELSE a$ = "R": ' rotation de 90° à droite END_IF ImgRot90(fr$,a$,fm$) FILE_DELETE fr$: FILE_COPY fm$,fr$: FILE_DELETE fm$ FILEBIN_OPEN_READ 1,fr$ FILEBIN_POSITION 1,18: FILEBIN_BLOCK_READ 1,8,v%(0) wbm = v%(0)+256*v%(1)+65536*v%(2)+16777216*v%(3): ' largeur sélection en pixels hbm = v%(4)+256*v%(5)+65536*v%(6)+16777216*v%(7): ' hauteur sélection en pixels FILEBIN_CLOSE 1 GOSUB Afi RETURN ' ============================================================================== Copyclip: CLIPBOARD_COPY 1 RETURN ' ============================================================================== SUB ImgRot90(f$,RL$,fr$) ' Rotation d'une image f$ de 90° à gauche (RL$="L") ou à droite (RL$="R") ' ou à 180° (RL$ = "RL") ' Résultat dans le fichier fr$ (-> NB: doit être de même type que f$) DIM_LOCAL scr$,arg$,r$,q$: q$ = CHR$(34) r$ = "270": IF UPPER$(RL$)="R" THEN r$ = "90" IF UPPER$(RL$)="RL" THEN r$ = "180" IF FILE_EXISTS(fr$) = 1 THEN FILE_DELETE fr$: ' sinon, erreur scr$ = "C:\Temp\Vbscript.vbs" FILE_OPEN_WRITE 9,scr$ FILE_WRITELN 9,"Dim Img 'As ImageFile" FILE_WRITELN 9,"Dim IP 'As ImageProcess" FILE_WRITELN 9,"Set Img = CreateObject("+q$+"WIA.ImageFile"+q$+")" FILE_WRITELN 9,"Set IP = CreateObject("+q$+"WIA.ImageProcess"+q$+")" FILE_WRITELN 9,"Img.LoadFile "+q$+f$+q$ FILE_WRITELN 9,"IP.Filters.Add IP.FilterInfos("+q$+"RotateFlip"+q$+").FilterID" FILE_WRITELN 9,"IP.Filters(1).Properties("+q$+"RotationAngle"+q$+") = "+r$ FILE_WRITELN 9,"Set Img = IP.Apply(Img)" FILE_WRITELN 9,"Img.SaveFile "+q$+fr$+q$ FILE_WRITELN 9,"WScript.Quit(0)" FILE_CLOSE 9 EXECUTE_WAIT "Wscript.exe " + scr$: ' Exécution du script FILE_DELETE scr$ END_SUB ' ============================================================================== Exemple de capture du bureau (zoom x2 fois): | |
|