我想創建兩個圖片框,重疊。 第一個Picturebox用作背景,屏幕的圖片。使用這種方法 :另一個圖片框頂部的透明圖片框不起作用。如何解決這個問題?
public void BckShow()
{
Rectangle rect = Screen.GetBounds(this);
gBackImg = Graphics.FromImage(bBackImg);
gBackImg.CopyFromScreen(0,0,0,0,
Screen.PrimaryScreen.Bounds.Size,
CopyPixelOperation.SourceCopy);
}
第二PictureBox的是上述的第一個,可使用此鼠標事件被繪製的透明圖片框:
public void Draw(bool draw, Point sp, Point ep)
{
if (draw)
{
gCanvas.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
pen = new Pen(new SolidBrush(ColorName), BrushSize);
if (toolPen.Checked)
{
gCanvas.DrawLine(pen, sp, ep);
}
else if (toolEreser.Checked)
{
Rectangle rect = new Rectangle(ep.X, ep.Y, BrushSize*5, BrushSize*5);
gCanvas.DrawEllipse(pen, rect);
gCanvas.FillEllipse(new SolidBrush(ColorName), rect);
}
bCanvas.MakeTransparent(Color.White);
pbxCanvas.Refresh();
dirty = true;
toolSave.Enabled = true;
}
}
private void pbxCanvas_MouseDown(object sender, MouseEventArgs e)
{
sp = e.Location;
if (e.Button == MouseButtons.Left)
{
ActivePaint = true;
}
}
private void pbxCanvas_MouseUp(object sender, MouseEventArgs e)
{
ActivePaint = false;
}
private void pbxCanvas_MouseMove(object sender, MouseEventArgs e)
{
ep = e.Location;
Draw(ActivePaint, sp, ep);
sp = ep;
}
但是當我運行該程序,在第二當鼠標事件被觸發時,PictureBox不會畫任何東西。我如何解決這個問題?
我這樣做是因爲我只想將圖像保存在第二個圖片框中。與PrintScreen不同,但似乎在屏幕上做筆記並將圖像與屏幕圖像分開保存。
是否有另一種方式做到這一點?如使用圖片框以外的其他控件,或者可以直接使用屏幕作爲背景,但仍然可以將圖像分別保存在透明圖片框中。
這是我想要實現的例子:
繪圖時:
結果存儲的圖像:
我希望你們能幫助我解決這個問題。對於糟糕的解釋抱歉。
本作更詳細的文檔大綱窗口:
您可以添加文檔大綱窗口的屏幕截圖。這顯示了您的PictureBox如何與您的表單對齊。 – dwonisch
@woni:當然你可以看到它上面 – user3332360
你的PictureBox停靠在它的父容器中,嘗試在左上角繪畫並檢查事件是否被觸發。 – dwonisch