Я закодировал это, чтобы поцарапать изображение на картинке.Scratch Image на PictureBox C#
bool draw = false;
int pX = -1;
int pY = -1;
Bitmap drawing;
public Form1()
{
drawing = new Bitmap(transformedImage.Width, transformedImage.Height, transformedImage.CreateGraphics());
Graphics.FromImage(drawing).Clear(Color.Transparent);
}
private void transformedImage_MouseMove(object sender, MouseEventArgs e)
{
if (draw)
{
int penWidth = Convert.ToInt32(penWidthValue.Value);
if(blackCheck.Checked == true) ///black pen
{
Graphics panel = Graphics.FromImage(drawing);
Pen pen = new Pen(Color.Black, penWidth);
pen.EndCap = LineCap.Round;
pen.StartCap = LineCap.Round;
panel.DrawLine(pen, pX, pY, e.X, e.Y);
transformedImage.CreateGraphics().DrawImageUnscaled(drawing, new Point(0, 0));
}
else if(redCheck.Checked == true) /// red pen
{
Graphics panel = Graphics.FromImage(drawing);
Pen pen = new Pen(Color.Red, penWidth);
pen.EndCap = LineCap.Round;
pen.StartCap = LineCap.Round;
panel.DrawLine(pen, pX, pY, e.X, e.Y);
transformedImage.CreateGraphics().DrawImageUnscaled(drawing, new Point(0, 0));
}
else if(yellowCheck.Checked == true) /// yellow
{
Graphics panel = Graphics.FromImage(drawing);
Pen pen = new Pen(Color.Yellow, penWidth);
pen.EndCap = LineCap.Round;
pen.StartCap = LineCap.Round;
panel.DrawLine(pen, pX, pY, e.X, e.Y);
transformedImage.CreateGraphics().DrawImageUnscaled(drawing, new Point(0, 0));
}
else /// green
{
Graphics panel = Graphics.FromImage(drawing);
Pen pen = new Pen(Color.Green, penWidth);
pen.EndCap = LineCap.Round;
pen.StartCap = LineCap.Round;
panel.DrawLine(pen, pX, pY, e.X, e.Y);
transformedImage.CreateGraphics().DrawImageUnscaled(drawing, new Point(0, 0));
}
}
pX = e.X;
pY = e.Y;
}
private void transformedImage_MouseDown(object sender, MouseEventArgs e)
{
if (scratchCheck.Checked == true)
{
draw = true;
pX = e.X;
pY = e.Y;
}
}
private void transformedImage_MouseUp(object sender, MouseEventArgs e)
{
draw = false;
}
private void transformedImage_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImageUnscaled(drawing, new Point(0, 0));
}
Но когда я сохранил изображение с помощью этого:
SaveFileDialog sfd = new SaveFileDialog();
sfd.Title = "Select Save Location";
sfd.InitialDirectory = @"Save_Path";
sfd.AddExtension = true;
if (sfd.ShowDialog() == DialogResult.OK)
{
switch (Path.GetExtension(sfd.FileName).ToUpper())
{
case ".BMP":
bmp.Save(sfd.FileName, ImageFormat.Bmp);
break;
case ".gif":
bmp.Save(sfd.FileName, ImageFormat.Gif);
break;
case ".JPG":
bmp.Save(sfd.FileName, ImageFormat.Jpeg);
break;
case ".JPEG":
bmp.Save(sfd.FileName,ImageFormat.Jpeg);
break;
case ".PNG":
bmp.Save(sfd.FileName, ImageFormat.Png);
break;
case ".png":
bmp.Save(sfd.FileName, ImageFormat.Png);
break;
default:
break;
}
}
Изображение поцарапана на PictureBox не был поцарапан.
Это поцарапан изображение на PictureBox перед сохранением:
Но когда я сэкономил, используя выше кода, царапины пропали без вести:
Как спасло картину вместе с царапинами ?, Большое спасибо.
Маленькая нитпик. В вашем заявлении switch ('Path.GetExtension (sfd.FileName) .ToUpper()') вам не нужно включать в себя строчные варианты: 'case '.gif": ', поскольку они никогда не будут удалены. – FrankerZ
Нам нужно увидеть больше кода 'SaveFileDialog()'. (Как вы это называете?) – FrankerZ
Я закодировал, что SaveFileDialog() в кнопке, которая сохранит изображение на картинке. –