लागू करने के बाद धुंधली तस्वीर मैं WPF में पिक्सेल शेडर के अजीब व्यवहार में आया हूं।शेडर प्रभाव
यह समस्या 100% पुनरुत्पादित है, इसलिए मैंने छोटे डेमो प्रोग्राम को लिखा। आप स्रोत कोड here डाउनलोड कर सकते हैं।
सब बुराई की जड़ छोटे वर्ग शीर्षक MyFrameworkElement है:
internal sealed class MyFrameworkElement : FrameworkElement
{
public double EndX
{
get
{
return (double)this.GetValue(MyFrameworkElement.EndXProperty);
}
set
{
this.SetValue(MyFrameworkElement.EndXProperty, value);
}
}
public static readonly DependencyProperty EndXProperty =
DependencyProperty.Register("EndX",
typeof(double),
typeof(MyFrameworkElement),
new FrameworkPropertyMetadata(0d, FrameworkPropertyMetadataOptions.AffectsRender));
protected override void OnRender(DrawingContext dc)
{
dc.DrawLine(new Pen(Brushes.Red, 2), new Point(0, 0), new Point(this.EndX, 100));
dc.DrawLine(new Pen(Brushes.Green, 3), new Point(10, 300), new Point(200, 10));
}
}
आप देख सकते हैं इस ढांचे तत्व 2 लाइनों renders: कम लाइन स्थायी निर्देशांक है, लेकिन ऊपरी रेखा EndX निर्भरता संपत्ति पर निर्भर करता है।
तो यह ढांचा तत्व पिक्सेल शेडर प्रभाव के लिए लक्षित है। सादगी के लिए मैं ग्रेस्केल शेडर प्रभाव का उपयोग here पाया। तो मैंने GrayscaleEffect को MyFrameworkElement पर लागू किया। आप परिणाम देख सकते हैं, यह अच्छा लग रहा है।
जब तक मैं EndX संपत्ति तेजी से वृद्धि हुई है।
छोटे रेखा धुंधली है और बड़ी लाइन ठीक है!
लेकिन अगर मैं ग्रेस्केल प्रभाव को हटा देता हूं, तो सभी लाइनें देखेंगे जैसे उन्हें चाहिए।
किसी को भी इस धुंधला के कारण क्या व्याख्या कर सकते हैं? या इससे भी बेहतर मैं इस समस्या को कैसे हल कर सकता हूं?
विशाल मूल्यों के लिए बिटमैपफेक्ट की सीमा की तरह लगता है। – LPL
@ एलपीएल यदि आप एंडएक्स प्रॉपर्टी में दूसरी (निचली) लाइन बांधते हैं और फिर एंडएक्स 80000 सेट करते हैं, तो सब ठीक हो जाएगा। मेरा मतलब है, हमारे पास अभी भी भारी मूल्य हैं, दोनों पंक्तियां बहुत लंबी हैं, लेकिन प्रभाव ठीक से काम करता है। या मुझे तुम्हारा विचार नहीं मिला, क्या मैंने किया? –