Einzelnen Beitrag anzeigen

Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#12

AW: TWAIN-Problem (TDelphiTwain versagt)

  Alt 4. Okt 2010, 18:16
Also beim Lesen Deiner Beschreibungen sind mir 3 Dinge aufgefallen:
  1. Wie Du selbst schon festgestellt hast und wie ich Dir bereits in der PM mitgeteilt hatte, gibt es einen Fehler mit TDelphiTwain.TransferMode := ttmMemory;. Ich halte das auch nicht für ein Problem der jewiligen Twain-Software, sondern vielmehr für eines von TDelphiTwain. Da die Komponente aber - soweit ich das beurteilen kann - nicht mehr weiterentwickelt wird, wird sich daran auch nichts mehr ändern.
    Die Weiterentwicklung macht auch nicht wirklich Spaß. Denn viele Hersteller halten sich nicht exakt an die Spezifikationen und damit kann man z.B. viele Einstellungen am Scanner nur noch mit der mitgelieferten Software vornehmen. Schade eigentlich.
  2. Die Zitate des Quellcode sind für mich teilweise nicht nachvollziehbar. Aber das Enabled := False; ist m.E. keineswegs Blödsinn. Der Schöpfer von TDelphiTwain hatte offensichtlich auch gemerkt, dass eben einige Hersteller von Twain-Software kein Ende anzeigen und damit OnSourceDisable eben nicht ausgelöst wird.
    Ich gehe sogar noch weiter. Bei mir steht in OnTwainAcquireCancel explizit ein TDelphiTwain.Source[FScanner].UnloadSource;.
  3. FloatToFIX32(); und FIX32ToFloat(); sind buggy. Dazu findet man im Netz einiges und auch eine Anleitung, wie man den Fehler behebt. Ich schicke Dir gern per PM meine Version(en).[EDIT]
    Delphi-Quellcode:
    function FloatToFix32 (floater: extended): TW_FIX32;
    {var
      fracpart : extended;}

    begin
      { Original-Code : .............
      //Obtain numerical part by truncating the float number
      Result.Whole := trunc(floater);
      //Obtain fracional part by subtracting float number by
      //numerical part. Also we make sure the number is not
      //negative by multipling by -1 if it is negative
      fracpart := floater - result.Whole;
      if fracpart < 0 then fracpart := fracpart * -1;
      //Multiply by 10 until there is no fracional part any longer
      while FracPart - trunc(FracPart) <> 0 do fracpart := fracpart * 10;
      //Return fracional part
      Result.Frac := trunc(fracpart);    }


      { Neuer Code: }
      Result.Whole:=trunc(floater);
      Result.Frac:=trunc(frac(floater)*65536.0);
    end;

    {Convert from twain Fix32 to extended}
    function Fix32ToFloat(Value: TW_FIX32): Extended;
    begin
      Result := Value.Whole + (Value.Frac / 65536.0);
    end;
    [/EDIT]
Ich habe Deine Eingangsfrage so verstanden, dass Du ein Grafikprogramm geschrieben hast, welches als Zugabe einen Scanner ansteuern soll. Es sollen also vermutlich mehrere Scanner damit funktionieren. Ich habe mal ein sehr kleines Beispielprogramm beigefügt. Dieses enthält den Aufbau in exakt derselben Art und Weise, wie ich mit den Scannern und den Bildern umgehe.
Melde mal bitte, ob das bei Dir/Deinem Scanner/Deiner Kamera funktioniert.

Gruß, Alex
Angehängte Dateien
Dateityp: zip TwainTest_p.zip (2,7 KB, 23x aufgerufen)
Alex Winzer

Geändert von Schwedenbitter ( 4. Okt 2010 um 18:19 Uhr)
  Mit Zitat antworten Zitat