2015-11-26 4 views
5

मैं आरेख खींचने के लिए .NET ड्राइंग का उपयोग कर रहा हूं। यह अनिवार्य रूप से एक स्टैक्ड बार चार्ट है। मेरे पास यह मुद्दा है कि मैं हैच शैली में रेखाओं की मात्रा को कम करना चाहता हूं ताकि इसे स्पष्ट करने के लिए इसे स्केल किया जा सके। मैंने चारों ओर देखा है लेकिन कुछ भी नहीं आया जो मेरी मदद कर सकता है।मैं आयत में खींची गई हैचस्टाइल को कैसे बढ़ा सकता हूं?

मैं एक आयताकार खींचता हूं और फिर इसे भरने के लिए एक हैचब्रश का उपयोग करता हूं लेकिन छवि आकार के कारण हैचफिल कम स्पष्ट हो जाता है। किसी भी सुझाव के लिए आपका धन्यवाद।

हैच स्टाइल और ब्रश प्रकार डीबी में संग्रहीत हैं और मैं उन्हें वापस करने के लिए एक सहायक फ़ंक्शन का उपयोग करता हूं। तो मैं आयताकार खींचता हूं और ब्रश प्राप्त करने के बाद मैं आयताकार भरता हूं। अनिवार्य रूप से मैं हैच भरना चाहता हूं अगर यह किया जा सकता है।

g.DrawRectangle(gridpen, startX, startY, BOREHOLE_RECT_WIDTH, layerRectHeight); 

brush = GetBoreholeBrush(l.SoilTypeMatrixLevel1Id.PrimaryBrushType, 
          l.SoilTypeMatrixLevel1Id.PrimaryFillStyle, 
          l.SoilTypeMatrixLevel1Id.PrimaryColour); 

g.FillRectangle(brush, startX, startY, BOREHOLE_RECT_WIDTH, layerRectHeight); 

और getBrush फ़ंक्शन; ब्रश प्रकार, पक्षियों के बच्चे शैली और रंग DB में संग्रहीत और वापस आ ब्रश बनाने के लिए उपयोग किया जाता है:

//=================================== 
    private Brush GetBoreholeBrush(string BrushType, string HatchStyle, string Colour) 
    //=================================== 
    { 
     //Decide on what brush type has been chosen. 
     Brush brush; 
     if (BrushType.ToLower() == BrushTypes.HatchBrush.ToString().ToLower()) 
     { 
      brush = new HatchBrush(GetHatchStyle(HatchStyle), 
            Color.Black, ColorTranslator.FromHtml(Colour)); 
     } 
     else if (BrushType.ToLower() == BrushTypes.SolidBrush.ToString().ToLower()) 
     { 
      brush = new HatchBrush(GetHatchStyle(HatchStyle), 
            Color.Black, ColorTranslator.FromHtml(Colour)); 
     } 
     else if (BrushType.ToLower() == BrushTypes.TextureBrush.ToString().ToLower()) 
     { 
      brush = new HatchBrush(GetHatchStyle(HatchStyle), 
            Color.Black, ColorTranslator.FromHtml(Colour)); 
     } 
     else 
     { 
      brush = new HatchBrush(GetHatchStyle(HatchStyle), 
            Color.Black, ColorTranslator.FromHtml(Colour)); 
     } 

     return brush; 
    } 

समारोह हैच शैली वापस जाने के लिए:

//=================================== 
    private HatchStyle GetHatchStyle(string FillStyle) 
    //=================================== 
    { 
     //Loop through each hatch tyle and return the correct one. 
     foreach (HatchStyle style in Enum.GetValues(typeof(HatchStyle))) 
     { 
      if (style.ToString().ToLower() == FillStyle.ToLower()) 
      { 
       return style; 
      } 
     } 
     return HatchStyle.Vertical; 
    } 

नीचे चित्र में देख सकते हैं हैच शैली स्पष्ट नहीं है।

enter image description here

+1

छवि _as आकार बढ़ता है_ आपको इसे समझाने की ज़रूरत है! छवि का आकार कैसे बढ़ता है? छवि स्केल करके? (जाहिर है तो सभी पिक्सेल स्केल और अनछार हो जाते हैं, इसके बजाय इसे सही आकार में खींचें और फिर भरें ..) – TaW

+0

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

+0

तक स्केल करना चाहता हूं, इसलिए, आपके पास एक बड़ा चार्ट है और आपका हैचस्टाइल पिक्सेल-छोटा है और आप लाइनों के बीच लाइनों और अंतराल की चौड़ाई को विस्तारित करना चाहते हैं हैच स्टाई में; ई तो जब आपकी छवि यानी मुद्रित या ज़ूम आउट हो जाता है तो हैच/लाइन अभी भी "ग्रेशिश" के रूप में दिखाई देगी? – quetzalcoatl

उत्तर

7

सबसे सीधा, लेकिन शायद बहुत उपयोगी नहीं जवाब है: नहीं, तुम एक HatchBrush के पक्षियों के बच्चे पैटर्न पैमाने पर नहीं कर सकते।

यह हमेशा पिक्सेल स्तर पर तेज दिखने वाला है और Graphics ऑब्जेक्ट को स्केल करके भी प्रभावित नहीं होता है।

आपके प्रश्न को देखते हुए मुझे आश्चर्य है: क्या आप वाकई HatchBrush का उपयोग कर रहे हैं? आपको GetBoreholeBrush फ़ंक्शन से ब्रश मिलता है। यदि आपने वास्तव में 50 HatchStyle में सूचकांक संग्रहीत किए हैं तो मुझे लगता है कि आप वास्तव में HatchBrush का उपयोग करते हैं।

अब एक HatchBrush का उपयोग कर काम नहीं करेगा मैं तुम्हें एक TextureBrush बजाय इस्तेमाल कर सकते हैं लगता है .. के रूप में

आप उन्हें स्केलिंग द्वारा बड़ा संस्करण के लिए पक्षियों के बच्चे पैटर्न को बदलने सकता है, यह वास्तव में एक साधारण रूपांतरण नहीं है। एक पूर्णांक कारक द्वारा बड़े पैमाने पर ड्राइंग का प्रत्यक्ष दृष्टिकोण और एंटी-एलियासिंग के बिना सरल है और यह काफी अच्छा हो सकता है।

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

तो आपको हैच आकार और स्ट्रोक चौड़ाई को संतुलित करने और बड़े आकार में स्क्रैच से आवश्यक सभी पैटर्न को फिर से बनाने की आवश्यकता होगी।

यहां एक उदाहरण है जो सरल समाधान के साथ समस्याओं का वर्णन करता है; पहली पंक्ति मूल हैच पैटर्न है, अन्य साधारण बनावट ब्रश परिणाम हैं, जो 1x, 2x और 3x द्वारा स्केल किए गए हैं ..:

enter image description here

पहले एक समारोह को बदलने के लिए एक HatchBrush करने के लिए एक TextureBrush

TextureBrush TBrush(HatchBrush HBrush) 
{ 
    using (Bitmap bmp = new Bitmap(8,8)) 
    using (Graphics G = Graphics.FromImage(bmp)) 
    { 
     G.FillRectangle(HBrush, 0, 0, 8, 8); 
     TextureBrush tb = new TextureBrush(bmp); 
     return tb; 
    } 
} 

ध्यान दें कि पक्षियों के बच्चे पैटर्न 8x8 पिक्सल है।

अब ऊपर की छवि के लिए इस्तेमाल किया Paint कोड:

private void panel1_Paint(object sender, PaintEventArgs e) 
{ 
    var hs = (HatchStyle[])Enum.GetValues(typeof(HatchStyle)); 

    for (int i = 0; i < hs.Length; i++) 
     using (HatchBrush hbr = new HatchBrush(hs[i], Color.GreenYellow)) 
     using (HatchBrush hbr2 = new HatchBrush(hs[i], Color.LightCyan)) 
     { 
      e.Graphics.FillRectangle(hbr, new Rectangle(i * 20, 10,16,60)); 
      using (TextureBrush tbr = TBrush(hbr2)) 
      { 
       e.Graphics.FillRectangle(tbr, new Rectangle(i * 20, 80, 16, 60)); 
       tbr.ScaleTransform(2, 2); 
       e.Graphics.FillRectangle(tbr, new Rectangle(i * 20, 150, 16, 60)); 
       tbr.ResetTransform(); 
       tbr.ScaleTransform(3,3); 
       e.Graphics.FillRectangle(tbr, new Rectangle(i * 20, 220, 16, 60)); 
      } 
     } 
} 

ध्यान दें कि जब TextureBrush बनावट संशोधित करने के लिए अच्छा तरीकों है, HatchBrush बिल्कुल ऐसा कुछ नहीं है ..

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