2010-12-15 37 views
6

TWAIN के साथ संचार के कौन से हिस्सों को अन्य धागे में रखा जा सकता है, उदा। एक पृष्ठभूमिवर्कर? या: क्या छवि स्थानांतरण को संभालने वाले लूप को विभाजित करना संभव है?मैं दस्तावेज़ फीडर से छवियों को स्कैन और ट्रांसफर कैसे कर सकता हूं

कुछ स्कैनर ड्राइवर कॉलिंग एप्लिकेशन पर लौटने से पहले सभी छवियों को स्कैन करते हैं जो एप्लिकेशन को सभी छवियों को एक साथ संभालने के लिए मजबूर करता है। इसके परिणामस्वरूप उदा। आउटऑफमेमरी अपवाद या मेरे डब्ल्यूपीएफ अनुप्रयोग में अजीब व्यवहार जब अचानक सभी घटनाओं (प्रत्येक स्कैन की गई छवि के बाद उठाया गया) को एक साथ संभाला जाना है। इसके अतिरिक्त आवेदन पूरा होने तक एप्लिकेशन लटकता है।

मैं ट्वेनडॉटनेट का उपयोग कर रहा हूं: http://code.google.com/p/twaindotnet/ लेकिन मैं संदेश फ़िल्टर का वर्णन करने वाला एक सामान्य समाधान और TwainDotNet के TWAIN स्वतंत्र के साथ बातचीत के लिए भी एक सामान्य समाधान की तलाश में हूं। TWAIN संदेशों वाले वर्कफ़्लो पर्याप्त होंगे। अन्य भाषाओं का भी स्वागत है, सी या डीप्ली जैसे कुछ पसंद करते हैं।

DataSourceManager में संदेश फिल्टर का वर्तमान क्रियान्वयन निम्नलिखित के रूप में वर्णित किया जा सकता: खिड़की हैंडल (hwnd)

  • को मुश्किल फिल्टर से

    • प्राप्त संदेश की जानकारी, ट्वेन के लिए आदि
    • अगर सामान भेज संदेश पास (जैसे जब दबाने TWAIN यूआई में बटन को रद्द)
      • बंद डेटा स्रोत
      • अक्षम फिल्टर
      • कॉल ScanningComplete घटना
    • यदि संदेश तैयार हस्तांतरण: एक पाश में
      • (एडीएफ जब तक खाली आदि है, इस ब्लॉक संदेश फिल्टर)
        • प्राप्त छवि
        • छवि सूचक को जीडीआई + छवि
        • में कनवर्ट करें
        • कॉल पैरामीटर के रूप में छवि
      • रीसेट हस्तांतरण
      • बंद डेटा स्रोत आदि के साथ TransferImage घटना
    • सूचित करें खिड़कियां, संदेश है कि (करीब संदेश के रूप में ही)

    मैंने इसे सेवर के साथ परीक्षण किया है अल स्कैनर:

    • एक फुजीत्सु फाई -5120 सी प्रत्येक पृष्ठ को स्थानांतरित होने पर स्थानांतरण इमेज ईवेंट को कॉल करता है। छवि मेरे WPF एप्लिकेशन में एक छवि सूची में तुरंत पॉप अप हो जाती है।
    • एक कैनन डीआर -5010 सी मेरे WPF एप्लिकेशन को तब तक अवरुद्ध करता है जब तक कि सभी छवियों को स्कैन नहीं किया जाता है (जब तक लूप समाप्त नहीं हो जाता)। विंडोज़ भी कहता है, डब्ल्यूपीएफ एप्लीकेशन प्रतिक्रिया नहीं दे रहा है।बाद सभी छवियों को स्थानांतरित कर दिया गया, केवल कुछ छवियों को प्रदर्शित कर रहे हैं और छवि सूची में चयन flickers आदि ..

    मैं प्रदर्शन समस्याओं के बारे में चिंतित नहीं हूँ, बल्कि अवरुद्ध खिड़की और स्मृति समस्याओं के बारे में। लूप को एक पृष्ठभूमिवर्कर में छवियों को स्थानांतरित करने से कई क्रैश हो गए, जिससे मैं डीबग नहीं कर सका। कारण मैं डब्ल्यूपीएफ के थ्रेडिंग मुद्दों पर विचार किया। मुझे यह भी नहीं पता कि ट्रांसफर लूप को कैसे विभाजित किया जाए, ताकि एक छवि को स्थानांतरित करने के बाद, प्रोग्राम संदेश फ़िल्टर पर वापस आ जाए और संदेश को संभाला जा सके।

  • +0

    क्या आपने ट्वेनडॉटनेट डेवलपर समूह से पूछने के बारे में सोचा है? [http://groups.google.com/group/twaindotnet-devs?pli=1 ](http://groups.google.com/group/twaindotnet-devs?pli=1) – ascarb

    +0

    मैं एक जेनेरिक की तलाश में हूं संदेश फ़िल्टर का वर्णन करने वाला समाधान और TwainDotNet के TWAIN स्वतंत्र के साथ बातचीत। TWAIN संदेशों वाले वर्कफ़्लो पर्याप्त होंगे। अन्य भाषाओं का भी स्वागत है, सी या डीप्ली जैसे कुछ पसंद करते हैं। –

    उत्तर

    8

    मैं एटालासॉफ्ट के लिए काम करता हूं, लेकिन मुझे डब्ल्यूपीएफ नहीं पता है, या डॉटटवेन के बारे में भी उतना ही नहीं!

    मैं आपको बता सकता हूं कि आम तौर पर TWAIN स्कैनिंग को एक अलग स्कैनिंग थ्रेड पर किया जा सकता है, लेकिन आपको कुछ ध्यान रखना होगा। स्कैनिंग थ्रेड पर सभी TWAIN संचालन करना सबसे आसान तरीका है - दो धागे के बीच TWAIN कॉल मिश्रण न करें।

    स्कैनिंग थ्रेड में संदेश पंप होना चाहिए या 'यूआई' थ्रेड होना चाहिए, जो भी आपके पर्यावरण में होता है। यह सिर्फ एक कार्यकर्ता धागा नहीं है।

    स्कैनर के यूआई के लिए मूल विंडो के रूप में उपयोग करने के लिए TWAIN को विंडो हैंडल (पुरानी शैली वाली Win32 HWND) देने की अपेक्षा की जाती है। मैं स्कैनिंग थ्रेड पर, इस उद्देश्य के लिए 'स्कैनिंग पैरेंट' विंडो बनाने की अनुशंसा करता हूं। जब आप चुनते हैं तो आप इसे दृश्यमान बना सकते हैं या नहीं, और स्कैन नौकरी के अंत में इसे नष्ट कर सकते हैं।

    यदि आपकी स्कैन नौकरियां बहुत बड़ी हो सकती हैं (उदाहरण के लिए 400 डीपीआई रंग के 50 पृष्ठ) तो आपको यह सुनिश्चित करना होगा कि स्कैनिंग प्रक्रिया या तो लॉजिकल मेमोरी या रैम को भरती नहीं है। यदि आप लॉजिकल मेमोरी भरते हैं (32-बिट विंडोज़ प्रक्रिया के साथ काम करने के लिए लगभग 2 जीबी पता स्थान मिलता है) आवंटन विफल हो जाएगा। यदि आप रैम भरते हैं, तो आने वाली छवियों का उपभोग/निपटान करने वाला कोड स्वैप करना शुरू कर सकता है, मूल रूप से धीमा हो सकता है, फिर स्कैनिंग आगे बढ़ता है और लॉजिकल मेमोरी भरता है। तो अगर आप को या तो की जरूरत है:

    1. पूरी प्रक्रिया और स्कैन धागे पर आने वाली प्रत्येक छवि के निपटान, या
    2. थ्रॉटल धागा स्कैन से छवियों के प्रवाह तो यह बहुत दूर उनके प्रसंस्करण के आगे नहीं चल सकता/स्वभाव।

    मुझे आमतौर पर लगता है कि मैं स्कैन थ्रेड को रद्द करने में सक्षम होना चाहता हूं, जिसके लिए कुछ धैर्य की आवश्यकता होती है क्योंकि TWAIN कॉल बाधित नहीं हो सकते हैं, और उनमें से कुछ भारी हैं। जैसा कि आपने अपने कैनन के साथ देखा है। दूसरी तरफ यदि आप एक TWAIN कॉल के अंदर एक थ्रेड को मजबूर करते हैं, तो स्कैनर को पावर-चक्र या यहां तक ​​कि सिस्टम को पुनरारंभ करने की आवश्यकता हो सकती है, और TWAIN प्रबंधक तब तक अवरुद्ध हो जाएगा जब तक कि TWAIN प्रबंधक DLL को स्मृति से अनलोड नहीं किया जाता है और पुनः लोड किया जाता है। आमतौर पर दो बार बहुत विनम्रता से बंद करने के लिए सबसे अच्छा।

     संबंधित मुद्दे

    • कोई संबंधित समस्या नहीं^_^