好的,首先,我有一个数据列表(多行)。该数据需要绘制在位图上进行预览(位图是文凭)。单击预览按钮后,我将被发送到另一个选项卡,在那里我可以预览作业(上面有图形的位图)。之后,用户可以选择打印数据(图形)。
如果我选择不同的行,图形必须更改。
问题是:我不知道该如何实现位图,何时何地在pictureBox上绘制位图。我尝试了很多方法(每次绘制的地方都有一个静态位图,因为无法清除它进行第二次重绘而失败,有一个生成位图的方法,因为内存泄漏而失败),但我要么只处理文本,要么只处理背景图像,要么出现巨大的内存泄漏(因为我需要显示绘制的字符串,我无法处理位图)。
你对我该如何处理这个问题有什么建议吗?
选择我们正在为其生成预览的行
预览窗口的外观(显然上面有文本)
您需要两个位图,一个用于透支,另一个作为源,或者每次都需要动态创建结果。
在任何情况下,你都需要
- 保留原始图形
- 组合用完后就处理掉
我建议保持简单,并在SelectionChanged
:上创建一个结果图像
Bitmap diplomaBackground = null; // load upon startup
Bitmap result = null;
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
if (result != null)
{
if (pb_preview.Image != null) pb_preview.Image = null;
result.Dispose();
}
if (dataGridView1.SelectedRows.Count > 0)
{
result = CreateNewDiploma(dataGridView1.SelectedRows[0].Index);
pb_preview.Image = result;
}
}
Bitmap CreateNewDiploma(int rowIndex)
{
Bitmap bmp = new Bitmap(diplomaBackground);
using (Graphics G = Graphics.FromImage(bmp))
{
// draw the data..
}
return bmp;
}
将预览框设置为缩放。