![]() |
Dokument Scanner
Hallo Delphi-Programmierer!
:coder2: Der Dokument Scanner ist dafür geeignet unterschiedliche Dokument- bzw. Papierformate zu erkennen, zu beschneiden und abzuspeichern. Das komplette Abbild wird ohne weitere "Scanner-Dialogabfrage" vom Scanner in ein TBitmap32 als Original übernommen. Danach wird das Bild mit Helligkeit, Kontrast, u.a. in ein zweites TBitmap32 geflitert. In dem gefilterten Bild wird anschließend ein horizontaler und vertikaler Linienvergleich durchgeführt um den Rand des Dokumentes bzw. die Koordinaten zu lokalisieren. Abschließend werden nun diese "Beschneidekoordinaten" dazu benutzt um das Dokument aus dem original TBitmap32 auszuschneiden. Die Filterung des Bildes wird somit nur zur Koordinatenermittlung benutzt. Im Anhang findet Ihr eine gepackte Datei mit dem Design- und Sourcedode. Vorraussetzung ist GR32 und DelphiTwain. Eine fertig ausführbare Datei zum Schnell-Test ist auch angehängt. Hier schon mal die Unit im Klartext: Luckie: Quellcode entfernt. Über 1200 zeilen müssen im Beitrag nicht sein. Bedienungsanleitung: Auf der linken Seite findet Ihr die Einstellungen für den Scanner. Damit kann man das Original-Bild bereits vom Scanner ordentlich erfassen. Jeder Scanner ist in der Ablichtung verschieden. Zu diesen Einstellungen gehören Helligkeit, Kontrast, Schwarz-Weiß-Schwelle (ab wann ein Pixel bei einer Kontrasterhöhung mehr zu dunkel oder zu hell gehört und somit tendenziell verstärkt wird), Auflösung (Resolution), Skalierung (Zoom) und Farbtyp. Wie bereits beschrieben dienen diese Einstellungen nur der Aufbereitung des Original-Bildes die schon vor dem scannen getroffen werden. Ist das Abbild nun im Rechner kann es durch die Bildbearbeitung (Filterung), zu finden in der oberen mitte der Anwendung, zum Aufspühren der Kontur des Dokumentes aufbereitet werden. Meiner Erfahrung nach genügt es bereits die Helligkeit auf -10% herunter- und den Kontrast auf +30% heraufzuschieben. Es ist egal wie unschön dieses Bild jetzt erscheint es dient allein dazu um Ränder eines Blattes zu finden. In den Controls darunter "Dokument-Erkennung" kann man einen Pixel-Einzug einstellen, ab wann der PC das Bild nach Rändern durchsuchen soll. Dies dient insbesondere dazu den Fehlerbereich am linken und rechten Rand des Bildes zu überspringen, da genau an diesen Stellen das erzeugte Licht des Scanners dunkler ist als zur Mitte hin. Die Fix-Checkboxes bedeuten, dass ab dem eingestellten Pixel-Punkt die Randerkennung fixiert bleibt. Dies dient dazu, wenn das Blatt immer mit der Kante am oberen Rand des Scanners liegt braucht genau dieser Rand nicht mehr erkannt werden. Bsp-Einstellung: 20 Pixel links und rechts und oben auf 0 Pixel fixiert. Die Randtoleranz bedeutet die Abweichung einer Linie in Prozent, wann ein Rand als Rand bestimmt wird. Beschneiden und speichern sind selbsterklärend :tongue: . Das Vorschaufenster rechter Hand kann mit dem Maus-Wheel vergrößert und verkleinert werden. Dazu genügt ein Klick darauf damit das Control seinen Fokus erhält. Die Zoom-Richtung wird durch den Maus-Cursor bestimmt! Viel Spaß beim Scannen :thumb: . Gruß Dr. MAD [edit=fkerber]Leerzeichen eingefügt, um Layout zu "retten". Mfg, fkerber[/edit] [edit=Luckie]Quellcode entfernt. Mfg, Luckie[/edit] |
Re: Dokument Scanner
Also ich erhalte direkt beim Starten deiner App die Exception " Gleitkommadivsion durch null". Wenn ich auf Ok klicke und dann die Maus über die Form bewege, bekomme ich dauernd Exceptions.
|
DP-Maintenance
Dieses Thema wurde von "fkerber" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Open-Source" verschoben.
Ich glaube, hier passt es besser, da es ein komplettes Programm ist. |
Re: Dokument Scanner
Hallo daywalker9.
Unter welchem Betriebssystem benutzt Du die Applikation? |
Re: Dokument Scanner
Ich habe ehrlich gesagt nicht verstanden, was dein Programm macht.
Aber warum postest du hier den gesamten Quellcode? Die über 12ßß Zeilen Quellcode machen den Beitrag nicht gerade übersichtlicher. Desweiteren warum ist alles in der Form-Klasse? So was macht man nicht. Man schreibt sich dafür eine separate, unabhängige Klasse in einer separaten Unit. Und man sorgt dafür, dass die Klasse unabhängig von der Oberfläche ist. An deinem Quellcode kann man bestimmt noch viel optimieren. |
Re: Dokument Scanner
Ich erhalte beim Start folgende Meldungen (Win XP Prof. SP3):
Code:
(schon bevor das Formular sichtbar ist)
---------------------------
Dokument - Scanner --------------------------- '' ist kein gültiger Gleitkommawert. --------------------------- OK --------------------------- Und dann laufend AVs, wenn ich mit der Maus über die rechte, graue Fläche des Formulars fahre:
Code:
Grüße, Matze
---------------------------
Dokument - Scanner --------------------------- Zugriffsverletzung bei Adresse 004A5B56 in Modul 'Scanner.exe'. Lesen von Adresse 00000000. --------------------------- OK --------------------------- Edit: Also ähnlich dem, was daywalker9 auch sieht. |
Re: Dokument Scanner
Hallo Lukie.
Du wirst keinen Quellcode finden, der nicht zu optimieren ist! Meine Applikation ist auch nicht als Endprodukt anzusehen. Mein Beitrag ist eher zum Kopieren einzelner Techniken oder Prozeduren gedacht. Denke bitte an diejenigen, die noch keine Ahnung von dieser Materie haben und einen Anhaltspunkt suchen. Und dazu dient die Unit im Klartext um auch über die Suchfunktion mittels Schlüsselworten an den Beitrag zu gelangen. Dennoch würde ich mich freuen Dir die Aufgabe zu überreichen den Quellcode so zu optimieren und das diesem Beitrag hinzuzufügen, damit die Applikation zu einem End-Verbraucher-Produkt werden kann. Gruß Dr.MAD |
Re: Dokument Scanner
Zitat:
Zitat:
|
Re: Dokument Scanner
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Matze.
Der ungültige Gleitkommawert resultiert aus der procedure InitScannerValue, wenn es sich um TWON_RANGE handelt und eben keine Zahl von DelphiTwain in Min, Max, Step oder Current übermittelt wird. Dafür habe ich aber kein Gerät zum testen. Die "Maus-Exception" von TImgView32 ergab sich aus dem obigen Start-Prozedur-Abbruch, da der Speicher für BmpOriginal und BmpFiltered dadurch nicht reserviert wurde. Geänderter Code ist anbei. Gruß Dr.MAD |
Re: Dokument Scanner
HI,
wenn man bei mir den Scanner wechselt kommt folgende Meldung: Zitat:
Ich finde, das Programm sollte von alleine auf die Idee kommen, das aktuelle Bild etwas anders zu belichten und dann gleich den richtigen Rahmen vorgeben. Auch lässt die Benutzerführung zu wünschen übrig. Ich finde, dass die Idee, die hinter dem Programm steht, nicht schlecht ist, aber an der Umsetzung mangelt es an allen möglichen Stellen. Vielleicht ist eine Benutzerführung per Dialog nicht schlecht, also mit Weiter und Zurück-Buttons. Es ist allerdings bei deinem Programm nicht immer leicht zu erkennen, ob die Dukomentenerkennung auch das richtige fokusiert hat, ganz einfach, weil man einfach nicht sieht, wo der rechte Rand ist. Der ist bei mir irgendwo in /dev/null, also außerhalb des Bildschirms und ich bekomme wegen der Auflösung von 1024x768 nicht mehr zu sehen als einen schmalen Streifen. Auch die TrackBar gleicht das nicht aus, da diese nichts zum verschieben findet. Ein weiterer Punkte: Die Scansoftware meint beim Scannen: "Scan image to App product name". Das sieht nicht besonders kompetent aus. Du müsstest also bei deinem Programm in Produktname was gescheites eintragen. -> Ich seh grad, da steht schon was gescheits drin. Mal gucken, woran das liegt. (Sch*** Scantreiber. Ich könnte ihn *** [piep]) Bei Einstellungen -> Farbtyp: Was ist bitte _BW? Black&White? Das Bild kommt bei mir aber in Farbe. Du konntest für die 3 Konstanten auch schönere Namen finden. Soviel fürs erste. Bernhard PS: Mach doch bitte die neusten Versionen deines Programms in den ersten Post. Dort kann man diese dann auch schnell und einfach finden. Dann reicht ein einfacher Verweis in dem "Update-Post", dass eine neue Version da ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz