簡體   English   中英

C#:如何在單個圖像(例如* .png)中保存圖表和文本框?

[英]c#: how can i save a chart and a textbox in a single image (e.g. *.png)?

解決方案:使用DrawtoBitmap在同一位圖上分別繪制圖表和文本框,並使用bitmap.save保存它。

問題描述:我有分析數據並繪制圖形並將它們另存為.png文件的代碼。 我想在.png文件中添加文本以及圖形圖表。 是否可以將圖表和文本框拼貼為單個圖像,然后將其另存為單個文件? 請獲取我到目前為止的圖形image.png,以及我希望我的文本在同一圖像中。

在此處輸入圖片說明

您有很多選擇:

  • 您可以截圖

  • 您可以Save Chart的圖像,並在TextBox繪制DrawToBitmap ,然后在前一個圖像上繪制第二個圖像。

  • 您可以Save Chart的圖像,並在圖像DrawString TextBox.Text繪制為TextBox.Text

  • 您可以將TextBox添加到Chart.Controls (在代碼中!),然后使用DrawToBitmap使圖表將兩者都繪制到一個圖像中。

  • 您可以對Chart.xxxPaint事件中的文本進行DrawString並使用DrawToBitmap

接下來的兩個選項使文本成為圖表的真實組成部分:

  • (推薦:)您可以使用TextAnnotationRectangleAnnotation :將其放置在Chart的適當位置,並使用TextBox.TextChanged事件將文本復制到TextAnnotation 這是最“類似於圖表”的選項,也是我可能要做的。

  • 您甚至可以將TextBox 替換為可編輯的TextAnnotation ..!

沒有看到圖表,也沒有詳細了解目標,因此很難建議要走的路。

所有Annotations的放置都有些棘手,但在調整圖表大小時會移動,甚至在序列化時還會保存到xml。 非常值得學習!

更新:

這是一個示例,假設該文本位於默認的右上位置,將其放置在Legend正下方。

注意 ,在Chart以外的情況下, ElementPosition包含位置和大小,並且所有數字均以容器的百分比表示:

首先,我們在全球進行聲明; 我們也可以通過chart.Annotions集合訪問它,但是我很懶。 還請注意,我使用了RectangleAnnotation ,它與TextAnnotation相同,但是具有背景色和邊框的選項。

 RectangleAnnotation RA = null;

要創建它,我使用以下代碼:

RA = new RectangleAnnotation();
RA.BackColor = Color.LightPink;
RA.Alignment = ContentAlignment.TopLeft;
chart.Annotations.Add(RA);
RaPos();

要放置它,我使用一個函數:

void RaPos()
{
    if (RA == null) return;
    ElementPosition LP = chart.Legends[0].Position;
    RA.X = LP.X;
    RA.Y = LP.Bottom + 5;  // 5% below the legend
    RA.Width = LP.Width;
    RA.Height = 100 - LP.Bottom  - 10;  // leave 10% of the remaining space
}

我們需要像下面這樣調整位置:

private void chart_SizeChanged(object sender, EventArgs e)
{
    RaPos();
}

並將其與文本框同步:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    RA.Text = textBox1.Text;
}

保存所有注釋時,除非將它們放置在可見區域之外,否則確實會保存它們。

chart.SaveImage(someFileName.png, ChartImageFormat.Png);

該注釋將始終停靠在圖例下方,並將調整其高度以很好地填充剩余空間。

還請注意,通過添加以下內容: RA.AllowTextEditing = true; 用戶可以雙擊該矩形,然后將Annotation置於編輯模式,並需要單獨的TextBox

在此處輸入圖片說明

更新2:

現在,當您發布圖表時,我可以看到您將圖例停靠在底部。 當然,代碼需要進行一些更改,例如:

設置它時,我在右側創建了一些空間:

ChartArea ca = chart.ChartAreas[0];
ca.Position = new ElementPosition(5, 5, 75, 85); 

在定位中,我直接創建新的ElementPosition以便適合:

// numbers are in percent!!
RA.X = 83;
RA.Y = 8;
RA.Width = 15;
RA.Height = 80;

結果:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM