2015-11-26 35 views
5

我使用.Net繪圖繪製圖表。它本質上是一個堆積條形圖。 我遇到的問題是我想減少艙口線的數量,以某種方式擴大其範圍以使其更清晰。我環顧四周,但沒有遇到任何可以幫助我的東西。如何放大繪製在矩形中的hatchstyle?

我畫了一個矩形,然後用hatchbrush填充它,但由於圖像大小hatchfill變得不太清晰。謝謝你的任何建議。

hatchStyles和畫筆類型存儲在數據庫中,我使用幫助函數來返回它們。所以我繪製矩形,得到毛筆後填充矩形。基本上我想擴大孵化填充,如果可以做到的話。

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函數;刷型,孵化樣式和顏色都存儲在數據庫中,並用於創建返回刷:

//=================================== 
    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

因此,本質上,你有一個大的圖表,你的hatchstyle是像素小,你想要放大線條和線條之間的間距的寬度在孵化麥粒中; e因此,當您的圖像被打印或縮小時,孵化/線條仍然可以看到,如陰影線,而不是「灰色」? – quetzalcoatl

回答

7

最直接的,但可能不是非常有幫助的回答是:不,你不能縮放HatchBrush的填充圖案。

它意味着在像素級別上始終顯得銳利,甚至不會受縮放Graphics對象的影響。

看着你的問題我想知道:你確定你真的使用HatchBrush?你可以從函數GetBoreholeBrush中獲得筆刷。如果你真的存儲了指數到50 HatchStyle那麼我想你真的使用HatchBrush

現在,作爲使用HatchBrush將無法​​正常工作我想你可以使用一個TextureBrush代替..

您可以通過縮放起來改造填充圖案,以更大的版本;這不完全是一個簡單的轉換。以整數因子繪製較大而沒有抗鋸齒的直接方法很簡單,可能足夠好。

但是你可能需要微調它們,因爲這樣一來所有的像素,既行像素背景像素得到擴大,也都將對角線呈鋸齒狀。

因此,您需要平衡艙口尺寸和筆觸寬度,並在較大尺寸下重新創建您需要的所有圖案。

下面是一個例子,說明簡單解決方案的問題;第一行是原始的孵化模式,其他的是簡單的紋理畫筆結果,按1倍,2倍和3倍縮放。:

enter image description here

首先函數來變換HatchBrushTextureBrush

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有不一樣,在所有..