2013-10-22 8 views
7

मैं विंडोज एपीआई में एक फ़ाइल का थंबनेल प्राप्त करने की कोशिश कर रहा हूं। मुझे एक रास्ता मिला, लेकिन कोड उदाहरण के लिए विंडोज संस्करण 8 न्यूनतम की आवश्यकता है, मैं कम से कम 7 या Vista में काम करता हूं, अधिमानतः एक्सपी में काम करता हूं। यदि थंबनेल प्राप्त करने का एक प्लेटफार्म स्वतंत्र तरीका है तो मैं ऐसा करना पसंद करूंगा, लेकिन मैं एक नहीं ढूंढ पा रहा हूं।विंडोज एपीआई का उपयोग कर फ़ाइल का थंबनेल कैसे प्राप्त करें?

+0

संभावित डुप्लिकेट [सी # विंडोज एपीआई के माध्यम से फ़ाइल से थंबनेल प्राप्त करें] (http://stackoverflow.com/questions/1439719/c-sharp-get-thumbnail-from-file-via-windows-api) – SLaks

+2

नहीं, यह एक डुप्लिकेट नहीं है, मैं विंडोज एपीआई के बारे में एक सवाल पूछ रहा हूं, नहीं .net api। या आप मुझे बता रहे हैं कि मैं सामान्य विंडोज क्लाइंट प्रोग्राम से .NET एपीआई का उपयोग कर सकता हूं, उस मामले में बताएं कि कैसे। –

+0

वह .NET API अंतर्निहित विंडोज एपीआई के चारों ओर एक रैपर है। – SLaks

उत्तर

1

एक 7 विन सिस्टम पर का उपयोग करना:

PS> $myimage = [System.Drawing.Image]::FromFile("c:\image.jpg"); 
PS> $mythumb = $myimage.GetThumbnailImage(72, 72, $null, [intptr]::Zero); 
PS> $mythumb.Save("c:\thumb.jpg") 
+1

ऐसा नहीं होगा क्योंकि यह पूरी छवि प्राप्त करता है, थंबनेल कैश वाला बिंदु ज्यादातर प्रदर्शन होता है। –

+0

@DudeDawg [इस] के अनुसार (http://msdn.microsoft.com/en-us/library/system.drawing.image.getthumbnailimage।एएसपीएक्स), यदि यह मौजूद है तो यह थंबनेल प्राप्त करेगा: _ "यदि छवि में एक एम्बेडेड थंबनेल छवि है, तो यह विधि एम्बेडेड थंबनेल को पुनर्प्राप्त करती है और इसे अनुरोधित आकार में स्केल करती है। अगर छवि में एम्बेडेड थंबनेल छवि नहीं है, तो यह विधि मुख्य छवि को स्केल करके एक थंबनेल छवि बनाता है। "_ – David

8

कोई भी एपीआई नहीं है जो सभी विंडोज संस्करणों पर काम करता है, क्योंकि माइक्रोसॉफ्ट एक विंडोज संस्करण से दूसरे संस्करण में थंबनेल एपीआई बदलता रहता है।

Win2k पर करने के लिए और विस्टा (बाद के संस्करणों के बारे में निश्चित नहीं) सहित अप, आप SHGetDesktopFolder() और IShellFolder::ParseDisplayName() (या SHParseDisplayName() XP पर और बाद में) का उपयोग कर फ़ाइल के मूल फ़ोल्डर, तो IShellFolder::GetUIObjectOf() का उपयोग वांछित बच्चे को पुनः प्राप्त करने के लिए एक IShellFolder प्राप्त कर सकते हैं फ़ाइल का IExtractImage इंटरफ़ेस, और उसके बाद वास्तविक छवि को पुनर्प्राप्त करने के लिए छवि आकार और Extract() विधि सेट करने के लिए GetLocation() विधि को कॉल करें।

1) IThumbnailProvider का उपयोग करें:

Vista पर और बाद में, आप या तो कर सकते हैं। इसे IInitializeWith... इंटरफ़ेस (IInitializeWithStream, IInitializeWithItem, या IInitializeWithFile) में से एक के लिए पूछें, यह बताएं कि आप किस फ़ाइल में रूचि रखते हैं, और उसके बाद वास्तविक छवि प्राप्त करने के लिए GetThumbnail() विधि को कॉल करें। वैकल्पिक रूप से, आप वांछित फ़ाइल के लिए IShellItem प्राप्त कर सकते हैं और फिर फ़ाइल IThumbnailProvider प्राप्त करने के लिए BindToHandler विधि पर कॉल कर सकते हैं।

2) IThumbnailCache का उपयोग करें। छवि प्राप्त करने के लिए IShellItem वांछित फ़ाइल का प्रतिनिधित्व GetThumbnail() विधि को पास करें।

3) IShellItemImageFactory का उपयोग करें। किसी दिए गए फ़ाइल के लिए इस इंटरफ़ेस को प्राप्त करने के लिए SHCreateItemFrom...() फ़ंक्शंस (SHCreateItemFromIDList(), SHCreateItemFromParsingName(), SHCreateItemFromRelativeName(), SHCreateItemInKnownFolder(), SHCreateItemWithParent()) का उपयोग करें, फिर इसे GetImage() विधि पर कॉल करें।

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