2009-08-05 14 views
7

मैं VisualBrush के साथ संयुक्त OpacityMask प्रॉपर्टी का उपयोग करने का प्रयास कर रहा हूं ताकि जब आप किसी अन्य नियंत्रण (जैसे कि कोई अन्य छवि, आयताकार, या कोई अन्य नियंत्रण) पर एक छवि खींचें, तो दूसरे नियंत्रण में मौजूद छवि का हिस्सा एक अलग अस्पष्टता है। यानी, छवि में कुछ गैर शून्य शून्य अस्पष्टता है, और किसी अन्य नियंत्रण पर मौजूद छवि के किसी भी भाग में एक अलग (फिर से, शून्य-शून्य) अस्पष्टता है।WPF में एक अस्पष्टता मुखौटा के रूप में एक और नियंत्रण का उपयोग करें?

क्या यह संभवतः विजुअलब्रश और ओपेसिटीमास्क का उपयोग कर संभव है? या एक और जटिल दृष्टिकोण आवश्यक है?

धन्यवाद!

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

+0

मैं विचार एक छवि या आकार कि जिस तरह से नियंत्रण आकार का है के आकार का है और उपयोग करने के लिए OpacityMask की भरपाई जब आप वस्तु ले जाने के लिए, लेकिन उस के साथ चारों ओर खिलवाड़ आमतौर पर एक अच्छा समाधान नहीं होगा, विशेष रूप से यदि आप एक मुखौटा के रूप में उपयोग करना चाहते हैं तो गतिशील है (मेरे मामले में यह नहीं है)। – nsantorello

+0

मैं इस कारण का उल्लेख करना भूल गया कि यह आमतौर पर एक अच्छा समाधान नहीं होगा क्योंकि अगर आप छवि पर कुछ प्रकार की आधार अस्पष्टता चाहते थे (जो, मैं करता हूं), तो आपको उस छवि को बनाना होगा जो नियंत्रण को "नकल" करता है बड़ा (बड़े ऑफसेट या बड़ी मास्क करने योग्य छवियों के लिए समायोजित करने के लिए)। – nsantorello

+0

आपको अभी 34 प्रतिनिधि मिल गए हैं, आपने 150 प्रतिनिधि बक्षीस कैसे शुरू किया? – Sadegh

उत्तर

2

आईमा के उत्तर के अलावा, मैंने इसे समझ लिया है एक अस्पष्टता मुखौटा का उपयोग कर। मैं छवि के लिए लेआउट अद्यतन दिनांक में लगाए गए निम्नलिखित कोड का उपयोग करता हूं।

// Make a visual brush out of the masking control. 
VisualBrush brush = new VisualBrush(maskingControl); 
// Set desired opacity. 
brush.Opacity = 1.0; 
// Get the offset between the two controls. 
Point offset = controlBeingMasked.TranslatePoint(new Point(0, 0), maskingControl); 
// Determine the difference in scaling. 
Point scale = new Point(maskingControl.ActualWidth/controlBeingMasked.ActualWidth, 
    maskingControl.ActualHeight/controlBeingMasked.ActualHeight); 
TransformGroup group = new TransformGroup(); 
// Set the scale of the mask. 
group.Children.Add(new ScaleTransform(scale.X, scale.Y, 0, 0)); 
// Translate the mask so that it always stays in place. 
group.Children.Add(new TranslateTransform(-offset.X, -offset.Y)); 
// Rotate it by the reverse of the control, to keep it oriented correctly. 
// (I am using a ScatterViewItem, which exposes an ActualOrientation property) 
group.Children.Add(new RotateTransform(-controlBeingMasked.ActualOrientation, 0, 0)); 
brush.Transform = group; 
controlBeingMasked.OpacityMask = brush; 

यदि आप वांछित आधार अस्पष्टता चाहते हैं, तो दो छवियों का उपयोग करें; वह जो हमेशा बेस अस्पष्टता पर होता है, और दूसरा जो ओपेसिटी मास्क का उपयोग करता है जो इसके शीर्ष पर बैठता है। यदि आप बेस अस्पष्टता को मुखौटा अस्पष्टता से अधिक होना चाहते हैं, तो इमा के दृष्टिकोण का उपयोग करना आसान हो सकता है।

मुखौटा दृष्टिकोण के विपरीत इस समाधान का एक लाभ यह है कि यदि मास्किंग नियंत्रण चलता है, आकार बदलता है, तो यह स्वचालित रूप से इसके साथ सिंक में एक और नियंत्रण रखने के बिना परिवर्तन को उठाएगा।

यह इस प्रकार से दिखाई देता है: http://img149.yfrog.com/img149/4183/99793865.jpg

+0

जैसा कि मैंने उल्लेख किया है, यदि आप आधार अस्पष्टता> मुखौटा अस्पष्टता चाहते हैं, तो मुझे विश्वास नहीं है कि आप इस दृष्टिकोण का उपयोग कर सकते हैं क्योंकि यह दो छवियों का उपयोग करता है और आप केवल अस्पष्टता जोड़ सकते हैं, इसे घटा नहीं सकते हैं। दृष्टिकोण आईएमए सुझाव शायद आधार अस्पष्टता> मुखौटा अस्पष्टता के लिए सबसे अच्छा होगा। लेकिन मेरा मानना ​​है कि मेरा समाधान रिवर्स के लिए ऐसा करने का एक शानदार तरीका है। – nsantorello

1
  • कोई मास्क
  • दृश्य ब्रश नियंत्रण के लिए सही है कि ब्रश
  • खींचें छवि आकार और नियंत्रण की
  • सेट अस्पष्टता के बीच के साथ नियंत्रण के शीर्ष पर
  • पेंट आकार को परिभाषित करें वांछित प्रभाव प्राप्त करने के लिए ब्रश
+0

मैंने अभी तक यह कोशिश नहीं की है, लेकिन ऐसा लगता है कि अगर मैं नियंत्रण पर कम अस्पष्टता चाहता हूं तो यह बहुत अच्छा होगा। क्या होगा यदि मैं उच्च अस्पष्टता चाहता था (यानी ओपेसिटी = 0.5 पर छवि है और ओपेसिटी = 1.0 पर नियंत्रण पर हिस्सा है)? मुझे लगता है कि यह दृष्टिकोण केवल छवि की अस्पष्टता को कम कर सकता है, इसे बढ़ा नहीं सकता है। कृपया मुझे सुधारें अगर मैं गलत हूं। धन्यवाद। :) – nsantorello

+0

मुझे पता है कि मैंने मूल रूप से मेरे प्रश्न में इस आवश्यकता को निर्दिष्ट नहीं किया था। मैंने इसे शामिल करने के लिए प्रश्न संपादित किया है। – nsantorello

+0

हटाए गए जल्दी और गलत अपडेट – ima

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