2009-10-20 11 views
8

में एंटी-एलाइज्ड टेक्स्ट मेरे पास एक सी # एप्लिकेशन है जो वर्तमान समय को पारदर्शी .NET फॉर्म में दिखाता है। फॉर्म में कोई नियंत्रण नहीं है और कोई सीमा नहीं है। इसकी संपत्ति TransparencyKey इसे पारदर्शी बनाने के लिए फ़ॉर्म के पृष्ठभूमि रंग "हल्के भूरे रंग" पर सेट है।
तो उपयोगकर्ता केवल पाठ (वर्तमान समय) देख सकता है।एक पारदर्शी .NET फॉर्म

पाठ PaintEventHandler में तैयार की है:

private void Display_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics formGraphics = e.Graphics; 

    Font myFont = new Font("Microsoft Sans Serif", 24, FontStyle.Bold); 

    formGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; 
    //formGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel; 

    formGraphics.DrawString("00:00:00", myFont, Brushes.Green, 0.0F, 0.0F); 

    myFont.Dispose(); 
} 

पाठ "00:00:00" विरोधी aliasing के कारण अस्तव्यस्त दिखाई जाती है जब फार्म गहरी पृष्ठभूमि खत्म हो गया है है। प्रकाश पृष्ठभूमि के लिए पाठ ओ.के. है

text shows fringes due to anti-aliasing for dark background http://www.habermann-net.de/public/development/antiAliasing_bad.png

जाहिर विंडोज एक तरीका है कि यह फार्म की अपनी पृष्ठभूमि का रंग करने के लिए और एक तरह से है कि यह फिट बैठता है में नहीं फिट बैठता है में पाठ प्रस्तुत करना है:

इस छवि की समस्या और अच्छा मामले से पता चलता पृष्ठभूमि जो पारदर्शी रूप के पीछे है।

क्या पाठ को प्रतिपादित करते समय Windows को के पीछे पृष्ठभूमि लेना संभव है ताकि मुझे फ़्रिंग से छुटकारा मिल सके?

तदनुसार टेक्स्ट रेन्डरिंगहिंट सेट करके एंटी-एलाइजिंग को बंद करने के लिए एक "समाधान" हो सकता है। लेकिन अब तक यह मेरा पसंदीदा "समाधान" नहीं है।

सिस्टम:
Windows XP, सपा 3, .NET 3.5, 2008 वी.एस.

उत्तर

1

मैं एक similar question कुछ महीने पहले पूछा।

क्या मैं दो विकल्प हो रही थी कर समाप्त हो गया:

  1. कॉपी अस्थायी रूप से 0 करने के लिए अपनी अस्पष्टता की स्थापना द्वारा आवेदन के पीछे की पृष्ठभूमि है, तो उस पर एंटीएलियास पाठ आकर्षित। यह दृष्टिकोण अच्छी तरह से काम करता है अगर खिड़की और इसके नीचे वाले लोग अक्सर नहीं जाते हैं।
  2. layered window का उपयोग करना। TransparencyKey से बेहतर काम करता है, लेकिन अभी भी गैर-एंटीअलाइज्ड टेक्स्ट के साथ सबसे अच्छा काम करता है। (सिर्फ एक ClearType फ़ॉन्ट उपयोग करने से बचें और आप ठीक हो जाएगा)
-1

अपने Display_Paint विधि में, इस प्रयास करें:

this.SetStyle(ControlStyles.DoubleBuffer | 
     ControlStyles.UserPaint | 
     ControlStyles.AllPaintingInWmPaint, 
     true); 
this.UpdateStyles(); 
+0

टिप के लिए धन्यवाद, लेकिन शैली की स्थापना में मदद नहीं करता। – Habi

+0

मैं प्रतिलिपि भाग – pastapockets

+0

के बारे में अधिक जानना चाहता हूं असल में मैंने कुछ खोज की, ऐसा लगता है कि मैं CopyFromScreen, http://stackoverflow.com/questions/715094/how-do-i-capture-the-current की तलाश में था स्क्रीन के रूप में एक छवि – pastapockets

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