У меня есть две формы окна в моем приложении.На главной форме я нажимаю кнопку и открываю второе окно с панелью.В этой форме на панели я рисую вещи и читаю их в графическом окне.
Это кодировка моей основной формы.
Bitmap retBmp;
FrmDrawing frmDrawing = new FrmDrawing();
var result = frmDrawing.ShowDialog();
if (result == DialogResult.OK)
{
retBmp = frmDrawing.bmpNew;
pbDesign.Image = retBmp;
}
Вот так я рисую на своей второй форме.
public FrmDrawing()
{
InitializeComponent();
g = pnlDraw.CreateGraphics();
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
pen = new Pen(Color.Black, 5);
pen.StartCap = pen.EndCap = System.Drawing.Drawing2D.LineCap.Round;
}
private void pbRed_Click(object sender, EventArgs e)
{
PictureBox p = (PictureBox)sender;
pen.Color = p.BackColor;
}
private void pnlDraw_MouseDown(object sender, MouseEventArgs e)
{
moving = true;
x = e.X;
y = e.Y;
pnlDraw.Cursor = Cursors.Cross;
}
private void pnlDraw_MouseMove(object sender, MouseEventArgs e)
{
if (moving && x!=-1 && y!=-1 )
{
g.DrawLine(pen, new Point(x, y), e.Location);
x = e.X;
y = e.Y;
}
}
private void pnlDraw_MouseUp(object sender, MouseEventArgs e)
{
moving = false;
x = -1;
y = -1;
pnlDraw.Cursor = Cursors.Default;
}
private void btnClear_Click(object sender, EventArgs e)
{
g.Clear(Color.White);
pnlDraw.Invalidate();
}
private void btnAccept_Click(object sender, EventArgs e)
{
bmpNew = new Bitmap(pnlDraw.Width, pnlDraw.Height);
this.pnlDraw.DrawToBitmap(bmpNew, new Rectangle(0, 0, this.pnlDraw.Width, this.pnlDraw.Height));
this.DialogResult = DialogResult.OK;
this.Close();
}
Во второй форме я читаю то, что нарисовано на панели, в BMP и передаю его в формупо нажатию кнопки.Этот код работает почти нормально, за исключением того факта, что он проходит только панель, а не то, что нарисовано на этом.Если на нарисованную панель поместить другие двухцветные элементы управления графическим блоком, отображаемое изображение поставляется с этими цветными графическими блоками, а не с тем, которое я рисую на панели.Что я делаю не так при чтении того, что я нарисовал на панели в растровое изображение?Или что нужно исправить, чтобы получить то, что я рисую на панели, в растровое изображение.