Bilder scannen (TWAIN oder WIA)



  • Ich versuche seit einiger Zeit in c++ Bilder zu scannen, komme aber weder mit Twain noch mit WIA richtig hin. Ich möchte dazu keine GUI verwenden, sondern automatisch mit 300dpi und in Farbe scannen. Wenn der Scanner einen Einzug hat, sollten alle eingelegten Seiten der Reihe nach gescannt und als PNG gespeichert werden.

    1.)Twain-Variante

    Ich habe C++ Wrapper hier: http://www.codeproject.com/Articles/296/A-C-Wrapper-for-TWAIN heruntergeladen. Um diesen zu initialisieren, wird ein HWND erwartet, ich möchte jedoch keine GUI verwenden. Ich habe daher Codestellen wo darauf verwiesen wird, vorläufig auskommentiert. Derzeit funktioniert aber noch nicht einmal das Initialisieren.

    Die Libary wird folgendermaßen geladen, ist jedoch immer 0:

    m_hTwainDLL = LoadLibrary(L"TWAIN_32.DLL");

    Die Datei liegt direkt im Ausführungspfad und mit diesem Code wird auch bestätigt, dass die Datei existiert:
    if(boost::filesystem::is_regular_file("twain_32.dll"))
    std::cout << "file exists\n";

    2.)WIA-Variant
    Ich habe versucht den Code von diesem Projekt (http://sourceforge.net/projects/fiscanner/ ) zu übernehmen, allerdings stürzt die Anwendung beim Versuch zu scannen immer ab. Allerdings erhalte ich ein Vorschau-Bild, also mein Scanner ist definitiv WIA-fähig.
    Nachdem der Code nicht funktionierte habe, habe ich versucht diesen selbst zu schreiben. Ich bekommen für meinen Scanner auch ein IWiaItem*, wenn ich die unterstützten WIA Commands abfrage, wird jedoch nur ein WIA Synchronize Command
    angezeigt, nicht jedoch WIA Take Picture, was zum scannen erforderlich ist. Wenn ich aber ein TakePicture Command sende, bekomme ich einen 'not implemented' Error:

    IWiaItem2* p = 0;
    HRESULT hr = item->DeviceCommand(0, &WIA_CMD_TAKE_PICTURE, &p);

    if(!SUCCEEDED(hr))
    std::cout << "error: " << hr << "\n";



  • Du bist im falschen Forum, hier geht es um Standard C++.
    Deine Frage gehört eher ins WinAPI Forum, oder ggf. in Rund um die Programmierung.



  • Jo, nur eine Frage zu Twain: wieso schreibst du den Library-Namen einmal groß und einmal klein 😕

    m_hTwainDLL = LoadLibrary(L"TWAIN_32.DLL");

    Die Datei liegt direkt im Ausführungspfad und mit diesem Code wird auch bestätigt, dass die Datei existiert:
    if(boost::filesystem::is_regular_file("twain_32.dll"))



  • hustbaer schrieb:

    Deine Frage gehört eher ins WinAPI Forum, oder ggf. in Rund um die Programmierung.

    Ja stimmt, sorry. Bitte verschieben, wenn das ein Admin liest.

    Hacker schrieb:

    Jo, nur eine Frage zu Twain: wieso schreibst du den Library-Namen einmal groß und einmal klein 😕

    Im C++ Wrapper wurde der Name großgeschrieben, ich selbst schreibe ihn klein und beim Hereinkopieren habe ich nicht auf Formatierungsinkonsistenzen geachtet 😉 . Sollte ja keinen Unterschied machen.


Log in to reply