Impossible de définir correctement la partie à scanner avec DelphiTwain
ALSC
Messages postés19Date d'inscriptionmardi 24 juin 2003StatutMembreDernière intervention18 juin 2021
-
3 mars 2008 à 12:58
ALSC
Messages postés19Date d'inscriptionmardi 24 juin 2003StatutMembreDernière intervention18 juin 2021
-
5 mars 2008 à 13:39
Bonjour,
J'utilise DelphiTwain avec Delphi 7.
Mon problème est le suivant :
Je n'arrive pas à définir la partie à scanner avec précision en utilisant la fonction "Twain.Source[...].EnableSource" (pour scanner).
Quel que soit le type d'unité que je choisisse avec "Twain.Source[...].SetICapUnits" (tuInches, tuCentimeters, tuPicas, tuPoints, tuTwips, tuPixels, tuUnknown), il reste sur tuInches.
De plus, en utilisant "Twain.Source[...].SetImageLayoutFrame(0, 0, 1.5, 1.5)", il ne prend pas les chiffres après la virgule.Autrement dit, pour SetImageLayoutFrame, 1 ou 1,1 ou 1,5 ou 1,9 1 inch; 2 ou 2,1 ou 2,5 ou 2,9 2 inches et ainsi de suite.
Quelqu'un à t'il déjà rencontré ce problème ? et surtout à t'il une solution ?
ALSC
Messages postés19Date d'inscriptionmardi 24 juin 2003StatutMembreDernière intervention18 juin 2021 3 mars 2008 à 19:56
Merci pour ta réponse, mais j'ai bien sur déjà regardé les exemples.
J'ai aussi retourné le CHM dans tous les sens, mais je n'ai rien trouvé.
Ce qui est dommage, c'est qu'il n'y ai pas d'exemple sur la manière de numériser sans utiliser l'interface Twain (ShowUI=false).
Peut-être que je me trompe dans l'ordre d'appel des méthodes, mais je ne pense pas.
A tout hasard, je laisse un exemple de ma source qui ne fonctionne pas:
if not DM.Twain.LoadLibrary then Exit;
if not DM.Twain.LoadSourceManager then Exit;
if not DM.Twain.Source[DM.TPRScanSourceIndex.AsInteger].LoadSource then Exit;
with DM.Twain.Source[DM.TPRScanSourceIndex.AsInteger] do
begin
TransferMode:=TTwainTransferMode(ttmMemory);
SetIPixelType(tbdGray);
SetIBitDepth(8);
SetIXResolution(300);
SetIYResolution(300);
SetIndicators(false); //Censé masquer une fenêtre de progression qui s'affiche quand même
SetICapUnits(tuCentimeters)); //Ca reste en Inches
SetImagelayoutFrame(vLeft, vTop, vRight, vBottom); //Ne prend que la partie entière des valeurs
EnableSource(false, false); // paramètres: ShowUI, Modal - Modal à true ou false ne change rien, ça reste modal
while Enabled do Application.ProcessMessages;
end;
Je tiens à préciser que celà ne provient pas du scanner qui fonctionne tres bien avec ShowUI.
Si personne n'a de solution, peut-être que quelqu'un pourrais m'indiquer un autre composant qui fonctionne ?
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 4 mars 2008 à 19:30
function GetICapUnits(var Return: TTwainUnit;
var Supported: TTwainUnitSet; Mode: TRetrieveCap
{$IFDEF DEFAULTPARAM}=rcGet{$ENDIF}): TCapabilityRet;
function SetICapUnits(Value: TTwainUnit): TCapabilityRet;
appel GetICapUnits pour verifier deja si le peripherique supporte le truc.
verifie aussi le retour de fonction pour savoir si une erreur n'est pas survenue.
ALSC
Messages postés19Date d'inscriptionmardi 24 juin 2003StatutMembreDernière intervention18 juin 2021 5 mars 2008 à 13:39
Merci beaucoup...
J'ai bien compris la leçon : pour résoudre un problème, ça ne sert à rien de tirer la gueule chacun de son côté, il faut dialoguer.
Fort de ce principe, j'ai demandé à mon scanner (comme tu me l'as conseillé) ce qu'il est capable de comprendre comme type d'unités... Et à mon grand étonnement, il m'a répondu "tuInches" et "tuPixels".
Je me suis dit qu'on était bien parti pour s'entendre...Mais rien à faire, le bougre continue à me chercher.
Quand je lui demande poliment de me numériser une zone en inches de p. ex. (0, 0, 1.8, 1.8), il continue à me numériser une zone de (0, 0, 1, 1) inches. En fait, il ne prend que la partie entière des coordonnées de la zone.
Voici le code :
SetICapUnits(tuInches));
SetImagelayoutFrame(0, 0, 1.8, 1.8); //Ne prend que la partie entière des valeurs
EnableSource(false, false);
Comme tu as l'air de savoir leur parler, ne serait ce pas abuser de te demander pourquoi il me fait ça ?
Encore merci de bien vouloir jouer le rôle de médiateur entre moi et ce de scanner.