Я рисую string
GraphicsPath
на PictureBox
, и я позволяю пользователям перемещать строку на картинке с помощью мыши. Теперь я хочу сохранить изображение так, чтобы строка попала на место, где он перетащил его на изображение. Я пробовал это:Нарисовать строку на картинке image
float dx, dy;
private void closeWindow()
{
MessageBox.Show(NinjaClass.NINJA.location.ToString());
NinjaClass.NINJA.location = strPoint;//new Point(strPoint.X, strPoint.Y);
NinjaClass.NINJA.imgOpened = pictureBox1.Image;
Image tmp = Image.FromFile(NinjaClass.NINJA.ImgOrignalPath);
Graphics gr = Graphics.FromImage(tmp);
gr.DrawString(NinjaClass.NINJA.copyrightStr, NinjaClass.NINJA.font, new SolidBrush(NinjaClass.NINJA.color), new PointF(dx, dy));
NinjaClass.NINJA.imgOpened = tmp;
NinjaClass.NINJA.saveOpenedFile();
this.Close();
this.Dispose();
}
/////////////////////////////////////////////////////////////
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
gp.Transform(new Matrix(1, 0, 0, 1, dx, dy));//Translate and paint
e.Graphics.FillPath(new SolidBrush(color), gp);
gp.Transform(new Matrix(1, 0, 0, 1, -dx, -dy));//translate back (reset to old location)
}
//MouseDown event handler for your pictureBox1
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
strPoint = e.Location;
if (gp.GetBounds(new Matrix(1, 0, 0, 1, dx, dy)).Contains(e.Location))
{
gp.Transform(new Matrix(1, 0, 0, 1, dx, dy));
}
}
else if (e.Button == MouseButtons.Right)
{
pboxPoint = e.Location;
}
}
//MouseMove event handler for your pictureBox1
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
dx = e.X - strPoint.X;
dy = e.Y - strPoint.Y;
pictureBox1.Invalidate();
NinjaClass.NINJA.location = new PointF(strPoint.X, strPoint.Y);
}
else if(e.Button == MouseButtons.Right)
{
pictureBox1.Left += e.X - (int)pboxPoint.X;
pictureBox1.Top += e.Y - (int)pboxPoint.Y;
//NinjaClass.NINJA.location = pictureBox1.Location;
}
}
private void ScaleWindow_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar == (char)Keys.Enter) || (e.KeyChar == (char)Keys.Space) || (e.KeyChar == (char)Keys.Escape))
{
this.closeWindow();
}
}
Но я столкнулся с некоторой проблемой положения. Я имею в виду, что строка сохраненного изображения имеет другое положение, чем позиция, в которой пользователь перетаскивал ее на изображение.
Update: Вот функция, которая сохраняет изображение:
public void saveOpenedFile()
{
imgOpened.Save(imgSavePath);
MessageBox.Show("Saved as ' " + imgSavePath + " '");
}
Я отредактировал ваше название. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
Что такое SizeMode в окне изображения? Это может принять в этом участие! –
Является ли 'saveOpenedFile()' этим? Где этот код? И где значения для этого исходят из: 'new PointF (dx, dy)'? – DonBoitnott