FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Cacher la barre des tâches
par papydall Aujourd'hui à 2:09

» quel est ce comportement de Panoramic_editor
par Oscaribout Aujourd'hui à 0:22

» Des FORM(s) Colorés
par Jean Claude Hier à 20:58

» Recherches dans un fichier texte
par JL35 Hier à 20:18

» Problème d'affichage des pages du forum (Résolu)
par Jean Claude Hier à 20:00

» Une "base de connaissance" - pour jouer ou plus si affinité
par Klaus Hier à 19:10

» Objet 3D_PLANE, réalisation d'un dé en 3D
par papydall Hier à 13:54

» Créer une application *.exe
par Yannick Ven 18 Mai 2018 - 20:01

» [RÉSOLU] Priorité affichage des objets : comment la définir?
par papydall Ven 18 Mai 2018 - 18:22

» Aucune différence entre ON_CLICK et ON_DOUBLE_CLICK
par Jean Claude Jeu 17 Mai 2018 - 8:37

» [Résolu] Récuperer les fonctions systeme de Panoramic
par Minibug Mar 15 Mai 2018 - 23:21

» Est-ce qu'un fichier est inclus dans l'application ?
par Yannick Mar 15 Mai 2018 - 12:04

» Création d'une application avec Panoramic_Editor
par Klaus Mar 15 Mai 2018 - 0:36

» Pour faire patienter
par Minibug Lun 14 Mai 2018 - 21:25

» Une copie de Panoramic Editeur
par Minibug Lun 14 Mai 2018 - 19:55

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2018
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 KGF_dll - nouvelles versions

Aller en bas 
Aller à la page : Précédent  1 ... 9 ... 15, 16, 17 ... 22 ... 29  Suivant
AuteurMessage
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
bignono

avatar

Nombre de messages : 1127
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Sam 18 Nov 2017 - 19:32

Bonsoir Klaus Smile ,
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!
Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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

EDIT

Pour 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
GAMMA

Donc, 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Dim 19 Nov 2017 - 11:21

Nouvelle version:
KGF.dll V7.96 du 19/11/2017

Nouveautés:
- correction d'un bug dans les fonctions GetClipboardPictureWidth et GetClipboardPictureHeight

Modules modifiés:
KGF.dll

La 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...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
bignono

avatar

Nombre de messages : 1127
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Lun 20 Nov 2017 - 16:21

Bonjour Klaus, Smile
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. Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
bignono

avatar

Nombre de messages : 1127
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Mar 21 Nov 2017 - 18:14

Bonsoir à tous, Smile  Bonsoir KLAUS Very Happy
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+
Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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)
:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Jicehel

avatar

Nombre de messages : 5916
Age : 45
Localisation : 77500
Date d'inscription : 18/04/2011

MessageSujet: 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)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1127
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Mer 22 Nov 2017 - 11:05

Bonjour à tous Smile , bonjour Klaus Very Happy  ,
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+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
bignono

avatar

Nombre de messages : 1127
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Jeu 23 Nov 2017 - 11:25

Bonjour KLAUS Smile
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.
Wink  Wink  Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Jeu 23 Nov 2017 - 15:57

Nouvelle version:
KGF.dll V7.98 du 23/11/2017

Nouveautés:
- nouvelle fonction: GenerateQRCode

Modules modifiés:
KGF.dll
KGF.chm


La 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:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
bignono

avatar

Nombre de messages : 1127
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: 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+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
bignono

avatar

Nombre de messages : 1127
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Jeu 23 Nov 2017 - 16:47


J'ai Windows 7 pro et j'utilise panoramic 0927.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 11079
Age : 69
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
bignono

avatar

Nombre de messages : 1127
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Jeu 23 Nov 2017 - 18:37

Bon ok Klaus, mais ça m'étonne!
A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: KGF_dll - nouvelles versions   

Revenir en haut Aller en bas
 
KGF_dll - nouvelles versions
Revenir en haut 
Page 16 sur 29Aller à la page : Précédent  1 ... 9 ... 15, 16, 17 ... 22 ... 29  Suivant
 Sujets similaires
-
» Nouvelles versions de TC et TP
» Deux nouvelles versions de la Porsche 911 (type 991)
» Dacia : La Success Story Continue Avec Quatre Nouvelles Versions Et Séries Limitées
» désolé de nepas donner de mes nouvelles
» 2 versions de mapsource sur PC?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: