Laden...

WIA Scanning mit Feeder: Gescanntes Image enthält nur Deckblatt/erste Seite

Erstellt von SteWo81 vor 7 Jahren Letzter Beitrag vor 6 Jahren 1.435 Views
S
SteWo81 Themenstarter:in
3 Beiträge seit 2017
vor 7 Jahren
WIA Scanning mit Feeder: Gescanntes Image enthält nur Deckblatt/erste Seite

Hallo liebe Community,

ihr habe eine Scanmöglichkeit gebaut. Man kann vorher auswählen, ob man via FlatBed oder via Feeder scannen möchte. Das Scannen generell klappt bis auf das Problem, dass beim Scannen via Feeder bei mehrseitigen Dokumenten alles eingezogen wird, jedoch das Result-Image nur die erste Seite beinhaltet.

this.ScannerDevice = WiaDevice.FromUserDialog().AsScannerDevice();

setzt das Scannerdevice über den Dialog.


//Scanvorgang vorbereiten
InitScan();
// Scanvorgang durchführen
List<Image> images = this.ScannerDevice.PerformScan(FormatID.wiaFormatTIFF).ToList();

private void InitScan()
        {
            // Einstellungen für das Scanner-Gerät
            this.ScannerDevice.DeviceSettings.DocumentHandlingSelect = this.DocumentHandlingSelect;
            this.ScannerDevice.DeviceSettings.Pages = (this.ScannerDevice.DeviceSettings.DocumentHandlingSelect == DocumentHandlingSelect.Duplex) ? 2 : 1;

            // Einstellungen für das Scandokument
            this.ScannerDevice.PictureSettings.CurrentIntent = this.CurrentIntent;
            this.ScannerDevice.PictureSettings.HorizontalResolution = this.Resolution;
            this.ScannerDevice.PictureSettings.VerticalResolution = this.Resolution;
            this.ScannerDevice.PictureSettings.HorizontalExtent = (int)(this.DocumentSize.Width * this.Resolution);
            this.ScannerDevice.PictureSettings.VerticalExtent = (int)(this.DocumentSize.Height * this.Resolution);
            this.ScannerDevice.PictureSettings.Threshold = this.Threshold; ;
        }

Initialisiert den Scanvorgang und ruft Methode zum Scannen auf.


public void PerformScan(string formatID)         
{
ImageFile imageFile = this.Device.Items[1].Transfer(formatID);

            ImageFile argbImage = imageFile.ARGBData.get_ImageFile(imageFile.Width, imageFile.Height);

            Image result = Image.FromStream(new MemoryStream((byte[])argbImage.FileData.get_BinaryData()));

            return ScannerDevice.ExtractImages(imageFile);
        }

/// <summary>
        /// Liest alle Bilder aus dem angegebenen ImageFile-Objekt aus 
        /// </summary>
        /// <param name="imageFile">das ImageFile-Objekt, dessen enthaltene Bilder ausgelesen werden sollen</param>
        /// <returns>eine Auflistung der Bilder, die das ImageFile-Objekt enthält</returns>
        private static IEnumerable<Image> ExtractImages(ImageFile imageFile)
        {
            for (int frame = 1; frame <= imageFile.FrameCount; frame++)
            {
                imageFile.ActiveFrame = frame;
                ImageFile argbImage = imageFile.ARGBData.get_ImageFile(imageFile.Width, imageFile.Height);

                Image result = Image.FromStream(new MemoryStream((byte[])argbImage.FileData.get_BinaryData()));
                yield return result;
            }
        }

Scannen wird ausgeführt und die Liste der Images (Seiten), die gescannt wurden zurück.

Leider ist imageFile.FrameCount immer = 1.
Könnte mir jemand helfen und sagen, warum?
Was mache ich falsch?

Viele Grüße
SteWo81

D
985 Beiträge seit 2014
vor 7 Jahren
S
SteWo81 Themenstarter:in
3 Beiträge seit 2017
vor 7 Jahren

Sir Rufo, danke für den Link. hab es auf die Methodik mal umgebaut.
Leider zieht der Feeder alle Seiten ein, erstellt aber nur 1 Image. Der Rest des
Dokuments wird leider ignoriert.

Wenn ich den Scanner am Gerät selbst nutze erzeugt dieser ja auch ein pdf mit mehr Seiten.

Habt ihr noch weitere Tipps für mich?

S
SteWo81 Themenstarter:in
3 Beiträge seit 2017
vor 6 Jahren

Habe es nach obigen Link umgesetzt, jedoch zieht der Feeder alle Seiten direkt ein und nach dem zweiten mal ShowTransfer() kommt die Fehlermeldung "Das Gerät ist noch beschäftigt" (WiaError.Busy)

Wie kann ich dieses Problem beheben?

Wäre für jeden Tipp dankbar.

Viele Grüße