Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| KGF_dll - nouvelles versions | |
|
+12JL35 Oscaribout bignono Pedro pascal10000 silverman Jicehel papydall Minibug Marc Yannick Klaus 16 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 18 Nov 2017 - 17:47 | |
| - Citation :
- j'aurais aimé, plutôt que de passer par ce bouton, avoir accès à des fonctions supplémentaires telles le choix de la "résolution en ppp", une sélection directe en noir et blanc ou couleur et la possibilité de délimiter une zone à scanner dans l'aperçu de l'image.
Tu veux dire "faire tout cela par programme" ? Donc, avoir une ou plusieurs fonctions pour paramétrer le scan ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 18 Nov 2017 - 19:14 | |
| Je commence à coder une nouvelle fonction: - Code:
-
res% = dll_call4("ScannerFunction",TW%,dir%,act%,par%) TW% est le scanner ouvert dir% donne la direction (0=lecture 1=écriture) act% donne un code action à effectuer par% est un paramètre éventuellement utilisé par l'action. Actuellement, j'ai les actions suivantes: - Retourner / changer l'unité utilisée (Inches,Centimeters,Picas,Points,Twips,Pixels,Unknown) - Retourner / changer la résolution horizontale en unités choisies - Retourner / changer la résolution verticale en unités choisies D'autres suivront. Dis-moi ce dont tu as exactement besoin. L'interface TWAIN a des dizaines de possibilités...
Dernière édition par Klaus le Sam 18 Nov 2017 - 22:46, édité 1 fois | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: KGF_dll - nouvelles versions Sam 18 Nov 2017 - 19:32 | |
| Bonsoir Klaus , Ce que j'ai besoin... au minimum, la résolution de l'image en ppp, choisir un scan soit en couleur soit en niveau de gris (c'est bien pour passer les photos en noir et blanc), et pouvoir délimiter une zone à scanner. Mais si on peut faire des sélections de zones multiples, ou bien sélectionner par exemple une zone circulaire ou bien en forme de triangle, pentagone ou quelconque, etc..., ça ouvre pas mal de possibilités. Zoomer sur une partie de l'aperçu serait bien aussi pour permettre d'en sélectionner une zone. Bon, je ne veux pas te mettre la pression. Fait les fonctions qui te semblent les plus utiles. Le réglage des couleurs, les contraste et gamma sont aussi à exploiter, mais ça me parait moins essentiel. Merci d'avance! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 18 Nov 2017 - 20:59 | |
| Bon, je vais voir ça. Pour la résolution, c'est déjà fait - ça me semblait évident. Pour la couleur ou niveaux de gris, je fais le faire maintenant. Mais sache que cela, tout comme les autres fonctions de traitement d'image, sont déjà présentes dans KGF.dll dans la section de la gestion des images... Faut-il dupliquer cela pour le scanner ? En chargeant le résltat du scan dans le presse-papier, tu peux en faire ce que tu veux, déjà, avec les fonctions de KGF.dll. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 19 Nov 2017 - 0:00 | |
| Acuellement, j'ai codé: Je commence à coder une nouvelle fonction: Code: - Code:
-
res% = dll_call4("ScannerFunction",TW%,dir%,act%,par%) TW% est le scanner ouvert dir% donne la direction (0=lecture 1=écriture) act% donne un code action à effectuer par% est un paramètre éventuellement utilisé par l'action. Actuellement, j'ai les actions suivantes: - act%=0: Retourner / changer l'unité utilisée (Inches,Centimeters,Picas,Points,Twips,Pixels,Unknown) - act%=1: Retourner / changer la résolution horizontale en unités choisies - act%=2: Retourner / changer la résolution verticale en unités choisies - act%=3: Retourner / charger le format des pixels (Bw,Gray,Rgb,Palette,Cmy,Cmyk,Yuv,Yuvk,CieXYZ,Unknown) Pour le format des pixels, les 3 formats suivants sont intéressqants: Bw = noir/blanc Gray = nuances de gris Rgb = couleur en format RGB EDITPour la sélection d'une zone de l'image, je conseille d'utiliser les fonctions de gestion d'image de KGF.dll, à appliquer sur l'image scannée présente dans le presse-papier. Si besoin, je peux faire une maquette avec un rectangle ou cercle de sélection, modifiable par pa souris... Pour le découpage final, le contraste, la luminosité et le gamma, cela peut être fait avec les fonctions de KGF.dll, mais Panoramic a maintenant des commandes faisant la même chose: 2D_IMAGE_COPY / 2D_IMAGE_PASTE CONTRAST BRIGHTNESS GAMMADonc, tous les éléments de traitement sont réunis. KGF.dll contient même une fonction d'enregistrement de l'image dans un format quelconque, seulement déterminé par l'extension du nom du fichier: BMP bien sûr, mais également JPG, GIF, PNG et bien d'autres. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 19 Nov 2017 - 11:21 | |
| Nouvelle version: KGF.dll V7.96 du 19/11/2017Nouveautés: - correction d'un bug dans les fonctions GetClipboardPictureWidth et GetClipboardPictureHeightModules modifiés: KGF.dllLa doc est inchangée. Les sources sont à jour. Avec cette version corrigée, on peut utiliser cette version modifiée du programme de démo pour le scanner. Il y a maintenant un bouton "Sélection rectangle". Un clic sur ce bouton active la possibilité de tracer un rectangle de sélection dans l'image scannée. On a alors deux autres boutons: Annuler efface le rectangle et sort du mode de sélection, et Recadrer remplace l'image totale par le contenu du rectangle de sélection, puis sort du mode de sélection. Voici le code: - Code:
-
' test_Scanner.bas
label pret, close0, choix, scan1, scan2, sauver label selrect, recadrer, down, up, move, annuler
dim TW%, res%, sel%, f$, e$, zone%, sel0%(1), sel1%(1), encours% dim w%, h%, factH, factV
dll_on "KGF.dll"
button 1 : top 1,10 : left 1,10 : width 1,110 : caption 1,"Scanner direct" : on_click 1,scan1 button 2 : top 2,10 : left 2,130 : width 2,110 : caption 2,"Scanner dialogue" : on_click 2,scan2 button 3 : top 3,10 : left 3,250 : width 3,110 : caption 3,"Sauver" : on_click 3,sauver
save_dialog 9 : filter 9,"Images|*.bmp;*.jpg; *.png"
list 11 : top 11,40 : left 11,10 : width 11,150 : on_click 11,choix picture 12 : top 12,40 : left 12,180 : width 12,300 : height 12,400 : stretch_on 12 on_mouse_down 12,down : on_mouse_up 12,up : on_mouse_move 12,move 2d_target_is 12 : 2d_pen_color 255,0,0 image 13
button 21 : top 21,160 : left 21,10 : width 21,110 : caption 21,"Sélection rectangle" : on_click 21,selrect button 23 : top 23,220 : left 23,10 : width 23,110 : caption 23,"Recadrer" : on_click 23,recadrer hide 23 button 24 : top 24,250 : left 24,10 : width 24,110 : caption 24,"Annuler" : on_click 24,annuler hide 24 TW% = dll_call0("CreateScanner")
res% = dll_call2("GetScannerSources",TW%,handle(11)) sel% = dll_call1("GetSelectedScannerSource",TW%) res% = dll_call2("SelectListBoxItem",handle(11),sel%)
on_user_event pret on_close 0,close0
zone% = 0
end
close0: res% = dll_call1("DeleteScanner",TW%) return choix: sel% = item_index(11) res% = dll_call2("SelectScannerSource",TW%,sel%) return
scan1: res% = dll_call1("StartSelectedScanner",TW%) return
scan2: res% = dll_call1("StartScannerWithDialog",TW%) return sauver: f$ = file_name$(9) if f$="_" then return e$ = lower$(file_extract_extension$(f$)) message e$ return if (e$<>".bmp") and (e$<>".jpg") and (e$<>".png") message "Choisissez le format BMP, JPG ou PNG!" return end_if if file_exists(s$)=1 if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then return end_if clipboard_copy 12 res% = dll_call1("SaveAnyImageFile",adr(f$)) return
pret: message "reçu !" res% = dll_call1("CopyScannerImapeToClipBoard",TW%) clipboard_paste 12 display message "reçu !" w% = dll_call0("GetClipboardPictureWidth") h% = dll_call0("GetClipboardPictureHeight") factH = w%/width(12) factV = h%/height(12) 2d_pen_width int(factV)+1 return selrect: zone% = 1 sel0%(0) = 0 sel0%(1) = 0 sel1%(0) = 0 sel1%(1) = 0 clipboard_copy 12 clipboard_paste 13 hide 21 show 23 show 24 return
down: if zone%=0 then return encours% = 1 sel0%(0) = mouse_x_left_down(12)*factH sel0%(1) = mouse_y_left_down(12)*factV sel1%(0) = sel0%(0) sel1%(1) = sel0%(1) return up: if zone%=0 then return encours% = 0 sel1%(0) = mouse_x_left_up(12)*factH sel1%(1) = mouse_y_left_up(12)*factV return move: if zone%=0 then return if encours%=0 then return off_mouse_move 12 sel1%(0) = mouse_x_position(12)*factH sel1%(1) = mouse_y_position(12)*factV ' clipboard_copy 13 clipboard_paste 12 if zone%=1 : ' rectangle caption 0, str$(sel0%(0))+","+str$(sel0%(1))+" "+str$(sel1%(0))+","+str$(sel1%(1)) 2d_poly_from sel0%(0),sel0%(1) 2d_poly_to sel1%(0),sel0%(1) 2d_poly_to sel1%(0),sel1%(1) 2d_poly_to sel0%(0),sel1%(1) 2d_poly_to sel0%(0),sel0%(1) display end_if on_mouse_move 12,move return recadrer: if zone%=0 then return if encours%=1 then return clipboard_paste 12 display 2d_image_copy 13,sel0%(0),sel0%(1),sel1%(0),sel1%(1) display clipboard_copy 13 display clipboard_paste 12 display w% = dll_call0("GetClipboardPictureWidth") h% = dll_call0("GetClipboardPictureHeight") factH = w%/width(12) factV = h%/height(12) 2d_pen_width int(factV)+1 show 21 hide 23 hide 24 return annuler: if zone%=0 then return zone% = 0 encours% = 0 clipboard_copy 13 clipboard_paste 12 show 21 hide 23 hide 24 return Tout ceci est réalisé entièrement en Panoramic, à l'exception de la détection des dimensions de l'image dans le presse-papier (d'où la correction du bug dans ces fonctions !). On pourrait y ajouter maintenant d'autres fonctions de traitement d'image (luminosité, contraste, gamma, ...), entièrement en Panoramic ou à l'aide de KGF.dll. Un mot encore: on peut facilement implémenter une fonction "retour en arrière" en multipliant les objets IMAGE utilisés pour mémoriser l'image avant le dessin du rectangle de sélection. Le programme utilise l'objet 13. On pourrait utiliser les objets 100, 101, 102, ... et une variable contenant le dernier objet utilisé. On crée un nouvel objet et on incrémente cette variable à chaque recadrage. On peut alors créer un bouton "Retour en arrière" dans lequel on supprime le dernier objet IMAGE utilisé, on décrémente la variable concernée et on réaffiche l'état précédent en utilisant CLIPBOAD_COPY pour placer le contenu de l'objet IMAGE pointée par la variable dans le presse-papier, puis clipboard_paste 12 pour copier le presse-papier dans l'image à l'écran. Ce sera un petit exercice pratique pour les amateurs... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 19 Nov 2017 - 19:01 | |
| Pour montrer à quel point il est facile defaire une fonction "Précédent" permettant de revenir,, pas à pas, sur les recadrages successifs, sans limitation de profondeur, en voici la démo (c'est un exemple d'implémentation du petit exercice proposé en fin du post précédent...): - Code:
-
' test_Scanner.bas
label pret, close0, choix, scan1, scan2, sauver label selrect, recadrer, down, up, move, annuler, precedent
dim TW%, res%, sel%, f$, e$, zone%, sel0%(1), sel1%(1), encours% dim w%, h%, factH, factV dim nImage%
dll_on "KGF.dll"
button 1 : top 1,10 : left 1,10 : width 1,110 : caption 1,"Scanner direct" : on_click 1,scan1 button 2 : top 2,10 : left 2,130 : width 2,110 : caption 2,"Scanner dialogue" : on_click 2,scan2 button 3 : top 3,10 : left 3,250 : width 3,110 : caption 3,"Sauver" : on_click 3,sauver
save_dialog 9 : filter 9,"Images|*.bmp;*.jpg; *.png"
list 11 : top 11,40 : left 11,10 : width 11,150 : on_click 11,choix picture 12 : top 12,40 : left 12,180 : width 12,300 : height 12,400 : stretch_on 12 on_mouse_down 12,down : on_mouse_up 12,up : on_mouse_move 12,move 2d_target_is 12 : 2d_pen_color 255,0,0 nImage% = 100 image nImage%
button 21 : top 21,160 : left 21,10 : width 21,110 : caption 21,"Sélection rectangle" : on_click 21,selrect button 23 : top 23,220 : left 23,10 : width 23,110 : caption 23,"Recadrer" : on_click 23,recadrer hide 23 button 24 : top 24,250 : left 24,10 : width 24,110 : caption 24,"Annuler" : on_click 24,annuler hide 24 button 25 : top 25,280 : left 25,10 : width 25,110 : caption 25,"Précédent" : on_click 25,precedent hide 25 TW% = dll_call0("CreateScanner")
res% = dll_call2("GetScannerSources",TW%,handle(11)) sel% = dll_call1("GetSelectedScannerSource",TW%) res% = dll_call2("SelectListBoxItem",handle(11),sel%)
on_user_event pret on_close 0,close0
zone% = 0
end
close0: res% = dll_call1("DeleteScanner",TW%) return choix: sel% = item_index(11) res% = dll_call2("SelectScannerSource",TW%,sel%) return
scan1: res% = dll_call1("StartSelectedScanner",TW%) return
scan2: res% = dll_call1("StartScannerWithDialog",TW%) return sauver: f$ = file_name$(9) if f$="_" then return e$ = lower$(file_extract_extension$(f$)) message e$ return if (e$<>".bmp") and (e$<>".jpg") and (e$<>".png") message "Choisissez le format BMP, JPG ou PNG!" return end_if if file_exists(s$)=1 if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then return end_if clipboard_copy 12 res% = dll_call1("SaveAnyImageFile",adr(f$)) return
pret: message "reçu !" res% = dll_call1("CopyScannerImapeToClipBoard",TW%) clipboard_paste 12 display message "reçu !" w% = dll_call0("GetClipboardPictureWidth") h% = dll_call0("GetClipboardPictureHeight") factH = w%/width(12) factV = h%/height(12) 2d_pen_width int(factV)+1 return selrect: zone% = 1 sel0%(0) = 0 sel0%(1) = 0 sel1%(0) = 0 sel1%(1) = 0 clipboard_copy 12 clipboard_paste nImage% hide 21 show 23 show 24 show 25 return
down: if zone%=0 then return encours% = 1 sel0%(0) = mouse_x_left_down(12)*factH sel0%(1) = mouse_y_left_down(12)*factV sel1%(0) = sel0%(0) sel1%(1) = sel0%(1) return up: if zone%=0 then return encours% = 0 sel1%(0) = mouse_x_left_up(12)*factH sel1%(1) = mouse_y_left_up(12)*factV return move: if zone%=0 then return if encours%=0 then return off_mouse_move 12 sel1%(0) = mouse_x_position(12)*factH sel1%(1) = mouse_y_position(12)*factV clipboard_paste 12 if zone%=1 : ' rectangle caption 0, str$(sel0%(0))+","+str$(sel0%(1))+" "+str$(sel1%(0))+","+str$(sel1%(1)) 2d_poly_from sel0%(0),sel0%(1) 2d_poly_to sel1%(0),sel0%(1) 2d_poly_to sel1%(0),sel1%(1) 2d_poly_to sel0%(0),sel1%(1) 2d_poly_to sel0%(0),sel0%(1) display end_if on_mouse_move 12,move return recadrer: if zone%=0 then return if encours%=1 then return clipboard_paste 12 display nImage% = nImage% + 1 image nImage% 2d_image_copy nImage%,sel0%(0),sel0%(1),sel1%(0),sel1%(1) display clipboard_copy nImage% display clipboard_paste 12 display w% = dll_call0("GetClipboardPictureWidth") h% = dll_call0("GetClipboardPictureHeight") factH = w%/width(12) factV = h%/height(12) 2d_pen_width int(factV)+1 show 21 hide 23 hide 24 hide 25 zone% = 0 return annuler: if zone%=0 then return zone% = 0 encours% = 0 clipboard_copy nImage% clipboard_paste 12 show 21 hide 23 hide 24 hide 25 return precedent: if zone%=0 then return if nImage%=100 then return zone% = 0 delete nImage% nImage% = nImage% - 1 clipboard_copy nImage% clipboard_paste 12 show 21 hide 23 hide 24 hide 25 return Faites quelques recadrages successifs, puis utilisez le bouton "Précédent" qui apparaît en cliquant sur "Recadrer". Vous verrez - c'est spectaculaire ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 20 Nov 2017 - 1:16 | |
| Nouvelle version: KGF.dll V7.97 du 20/11/2017
Nouveautés: - nouvelle fonction: ScannerFunction
Modules modifiés: KGF.dll KGF.chm
La doc et les sources sont à jour.
Cette nouvelle fonction permet de retourner certaines informations sur le scanner, et d'en changer certaines. Elle permet par exemple de passer le scanner en mode noir et blanc, nuances de gris ou couleur, si le scanner supporte physiquement ces modes. Lisez bien a doc avant d'utiliser cette fonction !
ATTENTION !!!
Je suspends provisoirement cette fonction ScannerFunction car je suis tombé sur un bug inattendu !
Fin de l'alerte !
Le bug est identifié et corrigé. La fonctionh ScannerFunction est disponible et opérationnelle. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: KGF_dll - nouvelles versions Lun 20 Nov 2017 - 16:21 | |
| Bonjour Klaus, Je viens d'essayer ton programme exemple. Il faut enlever le return (ligne 68) après message e$ dans la routine "sauver" et corriger if file_exists(s$)=1 en if file_exists(f$)=1 ligne 73. Après plusieurs essais de sélection de zone, le programme part en bug. 1) j'appuie sur le bouton Scanner direct, après avoir cliqué 2 fois sur reçu, l'image scannée apparait. 2) j'appuie sur le bouton Sélection rectangle, je trace avec la souris une zone sur l'image scannée, puis je clique sur recadrer. Une nouvelle image s'affiche. Celle de la zone sélectionnée dans le rectangle. 3) Je clique à nouveau sur sélection rectangle puis sur précédent, et la première image scannée réapparait. 4) Je clique à nouveau sur sélection rectangle, et là, quand je veux sélectionner une nouvelle zone, le rectangle rouge se dessinant sur l'image n'est plus en phase avec la souris et l'image. Il en manque un bout, et ne délimite pas la zone que l'on a choisie. Maintenant: je relance à nouveau le programme, 1) j'appuie sur le bouton Scanner direct, après avoir cliqué 2 fois sur reçu, l'image scannée apparait. 2) j'appuie sur le bouton Sélection rectangle, je clique par erreur sur précédent puis sur recadrer et là: Erreur externe line 153 unsupported clipboard format. D'autre part, je n'ai pas trouvé l'aide pour scannerfunction. Merci quand même de cette avancée. Je suis sous Windows 7 pro. A plus. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 20 Nov 2017 - 18:29 | |
| Merci pour tes commentaires, Bignono.
Les problèmes de programmation viennent du programme de démo en Panoramic. Apparemment, je n'ai pas prévu tous les cas. Je vais y remédier.
Pour la doc, c'est un oubli de ma part. C'est corrigé maintenant. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 20 Nov 2017 - 19:31 | |
| Voici une version plus stable du programme de démo pour le scanner: - Code:
-
' test_Scanner.bas
label pret, close0, choix, scan1, scan2, sauver label selrect, recadrer, down, up, move, annuler, precedent
dim TW%, res%, sel%, f$, e$, zone%, sel0%(1), sel1%(1), encours% dim w%, h%, factH, factV, nw%, nh% dim nImage%
dll_on "KGF.dll"
button 1 : top 1,10 : left 1,10 : width 1,110 : caption 1,"Scanner direct" : on_click 1,scan1 button 2 : top 2,10 : left 2,130 : width 2,110 : caption 2,"Scanner dialogue" : on_click 2,scan2 button 3 : top 3,10 : left 3,250 : width 3,110 : caption 3,"Sauver" : on_click 3,sauver
save_dialog 9 : filter 9,"Images|*.bmp;*.jpg; *.png"
list 11 : top 11,40 : left 11,10 : width 11,150 : on_click 11,choix picture 12 : top 12,40 : left 12,180 : width 12,300 : height 12,400 : stretch_on 12 on_mouse_down 12,down : on_mouse_up 12,up : on_mouse_move 12,move 2d_target_is 12 : 2d_pen_color 255,0,0 nImage% = 100 image nImage%
button 21 : top 21,160 : left 21,10 : width 21,110 : caption 21,"Sélection rectangle" : on_click 21,selrect button 23 : top 23,220 : left 23,10 : width 23,110 : caption 23,"Recadrer" : on_click 23,recadrer hide 23 button 24 : top 24,250 : left 24,10 : width 24,110 : caption 24,"Annuler" : on_click 24,annuler hide 24 button 25 : top 25,280 : left 25,10 : width 25,110 : caption 25,"Précédent" : on_click 25,precedent hide 25 TW% = dll_call0("CreateScanner")
res% = dll_call2("GetScannerSources",TW%,handle(11)) sel% = dll_call1("GetSelectedScannerSource",TW%) res% = dll_call2("SelectListBoxItem",handle(11),sel%)
on_user_event pret on_close 0,close0
zone% = 0
end
close0: res% = dll_call1("DeleteScanner",TW%) return choix: sel% = item_index(11) res% = dll_call2("SelectScannerSource",TW%,sel%) return
scan1: res% = dll_call1("StartSelectedScanner",TW%) return
scan2: res% = dll_call1("StartScannerWithDialog",TW%) return sauver: f$ = file_name$(9) if f$="_" then return e$ = lower$(file_extract_extension$(f$)) message e$ return if (e$<>".bmp") and (e$<>".jpg") and (e$<>".png") message "Choisissez le format BMP, JPG ou PNG!" return end_if if file_exists(f$)=1 if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then return end_if clipboard_copy 12 res% = dll_call1("SaveAnyImageFile",adr(f$)) return
pret: res% = dll_call1("CopyScannerImapeToClipBoard",TW%) clipboard_paste 12 display message "reçu !" w% = dll_call0("GetClipboardPictureWidth") h% = dll_call0("GetClipboardPictureHeight") factH = w%/width(12) factV = h%/height(12) 2d_pen_width int(factV)+1 return selrect: zone% = 1 sel0%(0) = 0 sel0%(1) = 0 sel1%(0) = 0 sel1%(1) = 0 clipboard_copy 12 clipboard_paste nImage% hide 21 show 23 show 24 show 25 return
down: if zone%=0 then return encours% = 1 sel0%(0) = mouse_x_left_down(12)*factH sel0%(1) = mouse_y_left_down(12)*factV sel1%(0) = sel0%(0) sel1%(1) = sel0%(1) return up: if zone%=0 then return encours% = 2 sel1%(0) = mouse_x_left_up(12)*factH sel1%(1) = mouse_y_left_up(12)*factV return move: off_mouse_move 12 if zone%=0 on_mouse_move 12,move return end_if if (encours%=0)or (encours%=2) on_mouse_move 12,move return end_if sel1%(0) = mouse_x_position(12)*factH sel1%(1) = mouse_y_position(12)*factV clipboard_paste 12 if zone%=1 : ' rectangle caption 0, str$(sel0%(0))+","+str$(sel0%(1))+" "+str$(sel1%(0))+","+str$(sel1%(1)) 2d_poly_from sel0%(0),sel0%(1) 2d_poly_to sel1%(0),sel0%(1) 2d_poly_to sel1%(0),sel1%(1) 2d_poly_to sel0%(0),sel1%(1) 2d_poly_to sel0%(0),sel0%(1) display end_if on_mouse_move 12,move return recadrer: if zone%=0 then return if encours%<>2 then return off_mouse_move 12 clipboard_paste 12 display nImage% = nImage% + 1 image nImage% nw% = sel1%(0) - sel0%(0) nh% = sel1%(1) - sel0%(1) 2d_image_copy nImage%,sel0%(0),sel0%(1),sel1%(0),sel1%(1) display clipboard_copy nImage% display clipboard_paste 12 display w% = nw% h% = nh% factH = abs(w%/width(12)) factV = abs(h%/height(12)) 2d_pen_width int(factV)+1 show 21 hide 23 hide 24 hide 25 zone% = 0 encours% = 0 on_mouse_move 12,move return annuler: if zone%=0 then return zone% = 0 encours% = 0 clipboard_copy nImage% clipboard_paste 12 show 21 hide 23 hide 24 hide 25 return precedent: if zone%=0 then return if nImage%=100 then return zone% = 0 delete nImage% nImage% = nImage% - 1 clipboard_copy nImage% clipboard_paste 12 w% = dll_call0("GetClipboardPictureWidth") pause 100 h% = dll_call0("GetClipboardPictureHeight") factH = w%/width(12) factV = h%/height(12) 2d_pen_width int(factV)+1 show 21 hide 23 hide 24 hide 25 return
Modification purement Panoramic - KGF.dll reste inchangée. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: KGF_dll - nouvelles versions Mar 21 Nov 2017 - 18:14 | |
| Bonsoir à tous, Bonsoir KLAUS J'ai essayé d'utiliser ScannerFunction juste pour essayer de passer du Noir et Blanc à la couleur et vice versa. Je n'y suis pas arrivé! J'ai l'impression que lorsque je veux imposer le pformat% 2=Gray, il me met tout en 1=BW et ça reste bloqué dans ce format là après. Ou alors je n'ai pas compris comment faire. Je n'ai pas encore essayé de changer l'unité. Pourrais-tu faire un petit programme exemple pour utiliser ScannerFunction. Sinon, j'ai réussi à passer des nuances de gris à la couleur et vice versa en utilisant les fonctions de la gestion d'image. Voilà, A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 21 Nov 2017 - 18:32 | |
| J'ai vu ce qui se passe, et j'ai corrigé. Recharge la DLL et essaie avec la routine scan1 (scan direct) comme ceci: - Code:
-
scan1: ' res% = dll_call4("ScannerFunction",TW%,1,3,1) : ' noir/blanc ' res% = dll_call4("ScannerFunction",TW%,1,3,2) : ' nuances de gris res% = dll_call4("ScannerFunction",TW%,1,3,4) : ' couleur RGB res% = dll_call1("StartSelectedScanner",TW%) return Tu choisiras une des options, selon tes souhaits... Voici le résultat avec - Code:
-
res% = dll_call4("ScannerFunction",TW%,1,3,1) : Voici le résultat avec - Code:
-
res% = dll_call4("ScannerFunction",TW%,1,3,2) : Voici le résultat avec - Code:
-
res% = dll_call4("ScannerFunction",TW%,1,3,4) : | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Mer 22 Nov 2017 - 10:51 | |
| chouette cet ajout (comme beaucoup d'ajout fait dans KGF mais bon, toujours bon à dire) | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: KGF_dll - nouvelles versions Mer 22 Nov 2017 - 11:05 | |
| Bonjour à tous , bonjour Klaus , Oui merci Klaus ça fonctionne bien comme cela! Bon le problème maintenant, c'est que je ne comprend pas comment utiliser scannerFunction pour avoir accès à unite%. et comment on obtient resH% et resV% avec pour par% comme indication "./." A quoi cela correspond-t-il. Je pense que c'est pareil si je veux récupérer la largeur et la hauteur de l'image scannée. Ce que je cherche à faire en réalité, c'est pouvoir régler le "ppp" ou point par pouce ou dpi. En premier lieu, il faut que je sache en quelle unité est le scanner avant de lui imposer un changement. quand je fais : unite% = dll_call4("ScannerFunction",TW%,0,0,adr(unites%)) il me renvoie 0 dans unite%, alors qu'on devrait avoir 1, 2, 4, 8, 16, 32 ou 64. Merci de ton aide Klaus, et merci surtout pour tout ce que tu fais. A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 22 Nov 2017 - 11:26 | |
| - Citation :
- je ne comprend pas comment utiliser scannerFunction pour avoir accès à unite%.
Tu choisis simplement l'unité de mesure que le scanner doit utiliser. Pour moi, je laisse tel quel, ou je cjoisis "pixels". - Citation :
- comment on obtient resH% et resV% avec pour par% comme indication "./." A quoi cela correspond-t-il.
Le signe "./." indique que, pour ce code action, le dernier paramètre par% n'est pas utilisé et est ignoré. La valeur recherchée est retournée dans res% (valeur de retour de la fonction). - Citation :
- En premier lieu, il faut que je sache en quelle unité est le scanner avant de lui imposer un changement.
Pour cela, tu fais: - Code:
-
dim unite%, unites% unite% = dl_call4("ScannerFunction",TW%,0,0,adr(unites%)) unite% contiendra le code de l'unité actuellement configurée unités% contiendra une bitmap indiquant toutes les unités supportées par le scanner - Citation :
- il me renvoie 0 dans unite%
Je vais regarder cela. C'est une erreur. En réalité, ça decrait être 1 (j'ai dû oublier de faire le transcodage). | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 22 Nov 2017 - 12:16 | |
| J'ai corrigé le transcodage. Tu peux recharger la DLL. En fait, l'unité par défaut dépend du driver du scanner. Pour mon HP1310, c'est 1 = pouces. Pour le scanner virtuel distribué par Twain (utilisé pour les tests) c'est la même chose. Change la subroutine scan1 de la manière suivante: - Code:
-
scan1: if variable("unite%")=0 then dim unite%, unites% res% = dll_call4("ScannerFunction",TW%,0,0,adr(unites%)) : ' noir/blanc message "Unité actuelle="+str$(res%)+" Unités autorisées:"+hex$(unites%) ' res% = dll_call4("ScannerFunction",TW%,1,3,1) : ' noir/blanc ' res% = dll_call4("ScannerFunction",TW%,1,3,2) : ' nuances de gris res% = dll_call4("ScannerFunction",TW%,1,3,4) : ' couleur RGB res% = dll_call1("StartSelectedScanner",TW%) return
et tu verras de quoi il retourne pour ton driver. Le même problème de transcodage s'eest présenté pour le retour du format des pixels - c'est corrigé également. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: KGF_dll - nouvelles versions Jeu 23 Nov 2017 - 11:25 | |
| Bonjour KLAUS Bon j'ai récupéré unite%. Voici le résultat: unité actuelle=1 unités autorisées:23. Pourrais-tu être plus explicite sur unités autorisées. D'autant plus que dans mon list, j'ai 2 sources de scanner. 1) EPSON NX510/SX510/TX550 et 2) WIA-EPSON NX510/SX510/TX550 le premier donne unités autorisées 23 et le second 21. Merci de tes éclaircissements à ce sujet. Ensuite j'ai voulu récupérer resH% et resV%, mais comme le dernier paramètre par% n'est pas utilisé ou ignoré, j'ai essayé de différentes façon, mais ou panoramic plante et a cessé de fonctionner, ou alors erreur et cela bloque mon scanner après. Il faut que je l'éteigne puis que je le rallume et virer les processus panoramic.exe *32 dans le gestionnaire de tache. J'ai essayé comme ceci: resH%=dll_call3("ScannerFunction",TW%,0,1) ou resH%=dll_call4("ScannerFunction",TW%,0,1) ou resH%=dll_call4("ScannerFunction",TW%,0,1,0) Excuse moi si je ne suis pas doué pour me servir de KGF.dll Bon, faut que j'aille au médecin, j'ai mon œil droit qui est enflé. A + et merci de tes explications Klaus. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 23 Nov 2017 - 12:56 | |
| - Citation :
- Voici le résultat: unité actuelle=1 unités autorisées:23.
donc, unités autorisées: 1 = pouces 2 = cm 32 = pixels 64 = 64 - Citation :
- Ensuite j'ai voulu récupérer resH% et resV%,
Comme ceci: - Code:
-
ResolutionHorizontale% = dll_call4("ScannerFunction",TW%,0,1,0) ResolutionVerticale% = dll_call4("ScannerFunction",TW%,0,2,0) LargeurImage% = dll_call4("ScannerFunction",TW%,0,4,0) HauteurImage% = dll_call4("ScannerFunction",TW%,0,5,0)
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 23 Nov 2017 - 15:57 | |
| Nouvelle version: KGF.dll V7.98 du 23/11/2017Nouveautés: - nouvelle fonction: GenerateQRCodeModules modifiés: KGF.dll KGF.chmLa doc et les sources sont à jour. Comme son nom l'indique, cette fonction génère un GR-Code. L'image sera déposée dans le presse-papier, d'où on peut l'utiliser très simplement. Voici une petite démo, permettant également d'enregistrer le QR-Code généré: - Code:
-
' test_QRCode.bas
label qrcode, enreg
dim res%, QR%, s$, f$, e$
dll_on "KGF.dll"
alpha 1 : top 1,10 : left 1,10 : caption 1,"Contenu:" edit 2 : top 2,10 : left 2,60 : width 2,300 button 3 : top 3,10 : left 3,380 : caption 3,"QR-Code" : on_click 3,qrcode button 4 : top 4,10 : left 4,480 : caption 4,"Enregistrer" : on_click 4,enreg
picture 10 : top 10,40 : left 10,10 : width 10,200 : height 10,200 open_dialog 11 : filter 11,"Images (*.bmp,*.jpg,*.png,*.gif)|*.bmp;*.jpg;*.png;*.gif"
2d_target_is 10 2d_pen_color 255,255,255 2d_fill_color 255,255,255
end
qrcode: s$ = trim$(text$(2)) if s$="" then return ' inactive 0 2d_rectangle 0,0,200,200 display res% = dll_call3("GenerateQRCode",200,200,adr(s$)) if res%=0 then clipboard_paste 10 ' active 0 return enreg: f$ = file_name$(11) if f$="_" then return e$ = lower$(file_extract_extension$(f$)) if (e$<>".bmp") and (e$<>".jpg") and (e$<>".png") and (e$<>".gif") message "Mauvais type de fichier" return end_if if file_exists(f$)=1 if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then return end_if res% = dll_call1("SaveAnyImageFile",adr(f$)) message "Le QR-Code est enregistré dans "+f$ return
A noter que, pour fonctionner, une liaison internet doit être active, puisque la fonction utilise un service gratuit en ligne de Google. Voici le résultat: | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: KGF_dll - nouvelles versions Jeu 23 Nov 2017 - 16:05 | |
| Oui Klaus, je commence à comprendre! si il me renvoie pour unités autorisés 23 qui est en hexadécimal, cela donne 35 en décimal, ce qui correspond à 32 pour pixels +2 pour cm +1 pour pouces. 32+2+1=35. Est-ce que je me trompe? Par contre pour ResolutionHorizontale% = dll_call4("ScannerFunction",TW%,0,1,0) et ResolutionVerticale% = dll_call4("ScannerFunction",TW%,0,2,0) j'ai -1 comme résultat, ce qui est une erreur. pour LargeurImage% = dll_call4("ScannerFunction",TW%,0,4,0) et HauteurImage% = dll_call4("ScannerFunction",TW%,0,5,0) j'ai bien les dimensions en pixel! C'est parfait. A+ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 23 Nov 2017 - 16:13 | |
| - Code:
-
scan1: if variable("unite%")=0 then dim unite%, unites% ' res% = dll_call4("ScannerFunction",TW%,0,0,adr(unites%)) : ' noir/blanc ' message "Unité actuelle="+str$(res%)+" Unités autorisées:"+hex$(unites%) res% = dll_call4("ScannerFunction",TW%,0,1,0) : ' résolution horizontale message "Résolution horizontale="+str$(res%) ' res% = dll_call4("ScannerFunction",TW%,1,3,1) : ' noir/blanc ' res% = dll_call4("ScannerFunction",TW%,1,3,2) : ' nuances de gris res% = dll_call4("ScannerFunction",TW%,1,3,4) : ' couleur RGB res% = dll_call1("StartSelectedScanner",TW%) donne: ce qui dit bien "résolution de 200 pixels par unité, horizontalement". Je ne vois pas où est le problème. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: KGF_dll - nouvelles versions Jeu 23 Nov 2017 - 16:47 | |
| J'ai Windows 7 pro et j'utilise panoramic 0927. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 23 Nov 2017 - 17:07 | |
| Dans ce cas, ça veut simplement dire que le scanner ne fournit pas cette information (et accessoirement, ne permet pas de modifier la résolution). Désolé, dans ce cas, il n'y a rien à faire ! | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: KGF_dll - nouvelles versions Jeu 23 Nov 2017 - 18:37 | |
| Bon ok Klaus, mais ça m'étonne! A+ | |
| | | Contenu sponsorisé
| Sujet: Re: KGF_dll - nouvelles versions | |
| |
| | | | KGF_dll - nouvelles versions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |