2013-08-15 9 views
7

क्या यह xaml में छवि के साथ उपलब्ध चौड़ाई/ऊंचाई को भरने का कोई तरीका है? मैं UniformToFill की तरह कुछ की जरूरत है, लेकिन जहां मैं खिंचाव दिशा (चौड़ाई या ऊंचाई) को नियंत्रित कर सकतेउपलब्ध चौड़ाई/ऊंचाई (अलग से) भरने के लिए छवि खींचें

मान लें मैं निम्नलिखित कोड है है:

<UniformGrid Columns="2" Rows="2">   
    <Image Source="Desert1.jpg" Stretch="Uniform"/> // 
    <Image Source="Desert2.jpg" Stretch="UniformToFill"/> // 
    <Image Source="Desert3.jpg" /> 
    <Image Source="Desert4.jpg" /> 
</UniformGrid> 

संपादित करें: examle (चौड़ाई) के लिए: यदि छवि जैसा कि मैं दिखाना चाहता हूं उतना चौड़ा है, मुझे ऊंचाई की परवाह नहीं है और केवल x2 छवि ऊंचाई और चौड़ाई स्केल करें। तो छवि चौड़ाई फिट होना चाहिए, और ऊंचाई की परवाह नहीं है। यह वांछित व्यवहार है, लेकिन यदि यह संभव नहीं है - ठीक है। तो यदि आप इसे संभव बनाते हैं तो आप सवाल पर पुनर्विचार कर सकते हैं, मैं इसे xaml में कैसे कर सकता हूं।

इसके अलावा सभी छवियों को अलग चौड़ाई और ऊंचाई हो सकता है

+0

आपको इसे गतिशील रूप से नियंत्रित करने की आवश्यकता है? –

+0

@ किंगिंग हाँ, मुझे इसे नियंत्रित करने के लिए इंटरफ़ेस में चेकबॉक्स की तरह कुछ चाहिए, – Eugene

+0

"स्थिर" समाधान भी स्वीकार्य है, इसलिए मैं xaml कोड को दोगुना कर सकता हूं और अनचाहे छुपा सकता हूं: डी। लेकिन गतिशील रूप से बेहतर – Eugene

उत्तर

2

यह वही आप के लिए ...

TransformedBitmap

देख रहे हो सकता है यहाँ एक स्थिर विधि मैं एक ImageUtility वर्ग में बनाया है।

public static TransformedBitmap GetScaledBitmapImageSprite(BitmapSource src, double x_scale, double y_scale) 
{ 
    return (new TransformedBitmap(src, new ScaleTransform(x_scale, y_scale))); 
{ 

x_scale और y_scale के रूप में डबल्स हैं:

desired_width/original_width

हो सकता है कि मैं क्या आप के लिए देख रहे हैं, लेकिन लगता है कि यह हो सकता है की तुलना में थोड़ा अलग तुम सही पर शुरू धावन पथ।

आप स्मृति में अपने TransformedBitmap की दुकान और के माध्यम से नए रूपांतरण आवेदन कर सकते हैं:

TransformedBitmap x = new TransformedBitmap(); 
x.Transform = new ScaleTransform(x,y); 
+0

मैं एक एक्सएएमएल आधारित समाधान की तलाश में हूं, क्योंकि यह मुझे मूल कंटेनर की ऊंचाई, तस्वीर की ऊंचाई प्राप्त करने से बचाता है और उसके बाद कोड में स्केल दर की गणना करता है। – Eugene

3

मुझे लगता है कि आप प्रभाव आप कुछ शर्तों में की इच्छा प्राप्त करने में सक्षम हो सकता है। आपके चित्रों का आकार की तुलना में सभी बड़ी है कि वे प्रदर्शित किया जाएगा रहे हैं, तो आप संभवतः इस इस्तेमाल कर सकते हैं:

<Image Source="Desert.jpg" Stretch="UniformToFill" StretchDirection="DownOnly" /> 

एक ViewBox एक Image रूप में एक ही Stretch गुण है और के बीच मतभेद का एक अच्छा उदाहरण है एमएसडीएन पर How to: Apply Stretch Properties to the Contents of a Viewbox लेख में विभिन्न संयोजन।

+0

मैंने इन गुणों को देखा है, लेकिन एक ऐसी स्थिति जहां वे काम कर सकते हैं क्योंकि यह बहुत विशिष्ट होना चाहिए। इसके अलावा, वर्दी टॉफिल ऐसी स्थिति को कवर करता है जितना कि यह हमेशा वांछित ऊंचाई या चौड़ाई की तुलना में अधिक होता है। दुर्भाग्य से, UniformToFill वांछित संपत्ति सेट करने की अनुमति नहीं देता – Eugene

+0

यदि आप वास्तव में * एमएसडीएन पर लिंक किए गए पृष्ठ से उदाहरण कोड को एक नए परीक्षण WPF प्रोजेक्ट में रखने के लिए समय लेते हैं और इसे ऊपर सूचीबद्ध सेटिंग्स के साथ चलाते हैं, तो आप देखेंगे कि यह * आपको * वांछित परिणाम देता है। काम करने पर * केवल * शर्त यह है कि मूल छवि आकार प्रदर्शित होने से बड़ा है। वही, अगर वह स्थिति पूरी नहीं की जा सकती है तो मैं स्वीकार करता हूं कि इससे आपकी मदद नहीं होगी। – Sheridan

+0

ठीक है, मैंने यह कोड रखा है और अभी भी समझ में नहीं आता है। यह पूरी तरह से चौड़ाई और ऊंचाई दोनों में चित्रों के लिए UniformToFill का उपयोग करने जैसा दिखता है, लेकिन छोटी छवि के लिए यह बिल्कुल काम नहीं करता है। और ऐसा लगता है कि मैं नियंत्रित कर सकता हूं कि किस संपत्ति का उपयोग स्केल – Eugene

1

आप

<Image Source="{Binding Image}" Stretch="Fill"/> 

यदि आप खिंचाव = "UnifrmtoFill" तो यह दोनों की लंबाई और चौड़ाई एक अनुपात में बदल जाएगा का उपयोग की तरह इस्तेमाल करना चाहिए या मैं दोनों एक साथ कहते हैं।

इसलिए यदि आप स्ट्रेच = "भरें" का उपयोग करते हैं, तो यह आपको किसी भी समय जो भी बदलता है, उसमें ऊंचाई या चौड़ाई बदलने का मौका देता है।

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