2011-03-11 11 views
5

मेरे पास एक छवि दर्शक के रूप में कैनवास है। इसकी पृष्ठभूमि का उपयोग एक छवि रखने के लिए किया जाता है और मैं इसके ऊपर एक और छवि डालना चाहता हूं। तो, परिदृश्य इस तरह है:डब्ल्यूपीएफ: कैनवास की सीमाओं से बाहर निकलने वाली छवि से कैसे बचें?

<Canvas Name="VisorCanvas" Height="514" Width="720"> 
    <Canvas.Background> 
    <ImageBrush /> 
    </Canvas.Background> 
    <Image Name="foreground" /> 
</Canvas> 

मैं कोड पीछे (सी #) में गतिशील रूप से छवियों को सम्मिलित करता हूं।

समस्या यह है कि यदि छवि बहुत बड़ी है, तो छवि कैनवास की सीमाओं से परे हो जाती है। उदाहरण के लिए: मैं एक अप्रासंगिक पृष्ठभूमि छवि है और मैं नीचे दिए तरीक़े के माध्यम से कैनवास पैनल (इसकी पृष्ठभूमि के शीर्ष पर) के अंदर एक वर्ग दिखाना चाहते हैं:

  • किसी भी मामले वर्ग के छवि को फिर से होगा।
  • यदि यह कैनवास के आयामों से छोटा है, तो मैं इसे दिखाता हूं।
  • यदि यह किसी भी आयाम (चौड़ाई या ऊंचाई) में बड़ा है, तो मुझे या तो इसे फसल करने या छवि के एक हिस्से को पारदर्शी सेट करने की आवश्यकता है। ऐसा करने से मैं एक टीवी मोड या ऐसा कुछ प्राप्त करता हूं, क्योंकि यह आंकड़ा हमेशा कैनवास के अंदर "अंदर" दिखाई देता है (हालांकि एक हिस्सा फसल हो जाता है)

मैं यह कैसे कर सकता हूं? मैंने कोशिश की है:

  • क्रॉपप्ड बिटमैप का उपयोग करके छवि को क्रॉप करने के लिए, लेकिन यह सटीक नहीं है।
  • एक अतिरिक्त अस्पष्टता मास्क छवि के माध्यम से पारदर्शिता का उपयोग करने के लिए, लेकिन मुझे मूल से एक मुखौटा बिटमैप (पारदर्शिता के साथ) बनाना होगा और मुझे नहीं पता कि यह कैसे करना है।
  • RenderTargetBitmap का उपयोग करके "फोटो" बनाने और इस विधि के परिणामस्वरूप छवि को प्रतिस्थापित करने के लिए, लेकिन मैं नहीं कर सका।

मैं आभारी हूं यदि कोई इस पर प्रकाश डाल सकता है।

उत्तर

24

अपने Canvas तत्व में सेट करें, और यह कैनवास की सीमाओं से परे छवि को रोक देगा।

आप Image तत्व का उपयोग न करने पर भी विचार करना चाहेंगे। आप FillImageBrush पर सेट कर सकते हैं क्योंकि आप Viewbox और Viewport गुणों का उपयोग कर सकते हैं ताकि आप जिस स्रोत छवि को चाहते हैं उसका चयन कर सकें, और आउटपुट का आकार चुनें। (पेंट किए गए क्षेत्र के आयामों पर सटीक नियंत्रण लेने के लिए ViewportUnits से Absolute सेट करें।)

+0

क्लिपटॉबाउंड! मेरे पास कुछ जेड ऑर्डर मुद्दों को ठीक किया गया था। –

+0

मेरे लिए काम किया। बस स्पष्ट करने के लिए, क्लिप ऑब्जेक्ट को मूल ऑब्जेक्ट पर सेट किया जाना चाहिए। –

+0

@TylerPantuso 'पैरेंट' द्वारा क्या आपका मतलब 'कैनवास' है? यदि हां, तो वही है जो मैंने पहली वाक्य में कहा था। और यदि नहीं, तो आपका क्या मतलब है? क्या आप पाते हैं कि आपको इसे कैनवास के माता-पिता पर सेट करने की आवश्यकता है? यदि ऐसा है, तो यह सामान्य नहीं है। –

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