WPF: किसी चित्र को उसके मूल आकार में कैसे प्रदर्शित करें?


98

मुझे WPF में चित्र प्रदर्शित करने में समस्या है।

यहाँ मेरा कोड है:

<Button HorizontalAlignment="Left" Grid.Column="1" Grid.Row="5" Margin="0,5">
        <Button.Content>
            <StackPanel Orientation="Horizontal" Margin="10,0">
                <Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" Width="24" Height="24" />
                <TextBlock Text="添加" />
            </StackPanel>
        </Button.Content>
    </Button>

मेरे पास मूल आकार 32 * 32 के साथ एक छवि है, लेकिन जब मैंने उपरोक्त कोड चलाया, तो छवि अपने मूल आकार से परे सभी स्थान को भरने के लिए खिंचाव करेगी। मैंने "स्ट्रेच" संपत्ति को "कोई भी" करने के लिए सेट नहीं किया है, लेकिन ऐसा लगता है कि यह काम नहीं करता है।

तो, मैं इस समस्या को कैसे ठीक कर सकता हूं? धन्यवाद!

जवाबों:


127

यहाँ एक ऐसा ही सवाल है। आम तौर पर सेटिंग Stretch="None"पर्याप्त है।

यह भी बहुत महत्वपूर्ण है कि डीपीआई की मेटाडेटा में क्या छवि है। यह पता लगाने में मुझे काफी समय लग गया कि यदि छवि की DPI मॉनिटर की DPI (आमतौर पर 96) से अलग है, तो WPF स्वचालित रूप से छवि का आकार बदल देगा, क्योंकि यह DPI-स्वतंत्र होने की कोशिश करता है


संपादित करें

MSDN लिंक टूट गया है, यहाँ नया लिंक है: MSDN Blog - Blurry Bitmaps । पुराने लिंक को आर्काइव.ऑर्ग के लिए उपयोग करने के लिए चारों ओर रखें, यदि नया लिंक काम करना बंद कर देता है।


10
डीपीआई सेटिंग्स, पजा के बारे में शानदार टिप। मेरे कई टूलबार आइकन 72 डीपीआई पर सेट किए गए थे, जिसके कारण पिक्सेल आयाम 16x16 होने पर भी वे बड़े दिखाई देते हैं।
दशरथ

मुझे समझ नहीं आ रहा है। क्या आप कह रहे हैं कि स्क्रीन के रिज़ॉल्यूशन के आधार पर WPF आपकी विंडो को अलग तरह से लेआउट करेगा? कोई रास्ता नहीं है कि संभवतः एक अच्छी बात हो सकती है।
काइल डेलानी

@KyleDelaney क्या आपने उस लेख को पढ़ा है जो मैंने उत्तर में जोड़ा है?
Paya

1
@KyleDelaney हां, यही कारण है कि आप WPF में आकार, दूरी, मार्जिन आदि को निर्दिष्ट करने के लिए "पिक्सेल" के बजाय "अंक" का उपयोग करते हैं।
पेया

1
@ PawełAudionysos मैंने टूटी हुई कड़ी को ठीक कर दिया है
पाया

7
<Image Source="Images/Background.png" UseLayoutRounding="True" SnapsToDevicePixels="True" Width="600" Height="800" Stretch="Fill" />

यह एक मेरे लिए 600x800 pixelsऔर एक छवि के लिए काम करता है 96dpi

@ rishad2m8 यदि आकार अज्ञात है तो आकार का पता सबसे पहले https://msdn.microsoft.com/en-us/library/system.drawing.image.size(v=vs.110).aspx से लगता है।


1
क्या होगा अगर छवि का आकार अज्ञात है?
ऋषद

तुम एक रक्षक हो। आप यह जानना नहीं चाहेंगे कि मैं इस मुद्दे पर कब से तड़प रहा था।
डेविड एटकिंसन

1
UseLayoutRounding सच के लिए सेट मेरे लिए काम किया! धन्यवाद!
ब्लेकस्टैड

6

चौड़ाई या ऊँचाई निर्दिष्ट न करने का प्रयास करें, इसके बजाय इसका उपयोग करें:

<Image Source="/images/user_add.png" Stretch="None" HorizontalAlignment="Center" VerticalAlignment="Center" />

4

Paya के जवाब देने के लिए जोड़ा जा रहा है: क्षतिपूर्ति करने के लिए WPFपर नज़र रखता है संकल्प आप स्थापित करने के लिए सक्षम होना चाहिए करने के लिए अनुकूल करने के लिए के प्रयास Widthऔर Heightफ़ाइल के मूल आयाम और उपयोग करने के लिए Stretch="Fill"। इसने मेरे लिए काम किया।


0

यदि आप छवि को मूल आकार के साथ प्रदर्शित करना चाहते हैं, लेकिन छवि का आकार नहीं जानते हैं, तो मुझे लगता है कि छवि को UIElement की पृष्ठभूमि के रूप में सेट करने का सबसे अच्छा तरीका है। ऐशे ही:

    <Button>
        <Button.Background>
            <ImageBrush ImageSource="/images/user_add.png" Stretch="None"/>
        </Button.Background>
    </Button>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.