C#MVS2010绘制线和;面板上的图片框,同时保持图像分离

C#MVS2010绘制线和;面板上的图片框,同时保持图像分离,c#,visual-studio-2010,paint,C#,Visual Studio 2010,Paint,您可以在自己的程序中随意使用这些代码,关于另存为PDF的任何问题都会得到解答 我已经为一个问题挣扎了好几天了,我想说的是: 1) 一个程序,可以上传和图像和显示这个图像->工程的代码 2) 在该图像上方绘制线条,同时在以后可以删除它们或更改该线条的2个点中的1个点->仍要绘制,计划通过检查1)makelines var=false 2)onclick鼠标位置是否靠近线条点来执行此操作,如果是,则在按住鼠标的同时将鼠标移动到线条点,然后将点设置为鼠标x&y 3) 我想点击我制作的左边的一个图标,然

您可以在自己的程序中随意使用这些代码,关于另存为PDF的任何问题都会得到解答

我已经为一个问题挣扎了好几天了,我想说的是:

1) 一个程序,可以上传和图像和显示这个图像->工程的代码

2) 在该图像上方绘制线条,同时在以后可以删除它们或更改该线条的2个点中的1个点->仍要绘制,计划通过检查1)makelines var=false 2)onclick鼠标位置是否靠近线条点来执行此操作,如果是,则在按住鼠标的同时将鼠标移动到线条点,然后将点设置为鼠标x&y

3) 我想点击我制作的左边的一个图标,然后在上传的图片->works上绘制它

4) 问题!-当我在这个图像上绘制时,它会闪烁,之前绘制的线条和图标也会闪烁,问题是我已经将图像设置为面板背景,这样我就可以使用面板的绘制方法在上面绘制,并且我成功地将线条和图标存储到数组中,而不是在每次完成线条或图标之后,这将更新显示我的图像,并在上面绘制的线和图标形成阵列。它经常闪烁的事实是因为我使用了Mousemove函数来查看线条的绘制位置和图标的放置位置,为此我不得不在Mousemove上更新它,但这会导致所有线条、图标和背景在我移动时都会疯狂地闪烁

这是我的代码,非常感谢任何能在正确方向上帮助我的人//修复此问题或尝试解决此问题

下面是一段视频,让我们清楚地了解正在发生的事情和问题

如果代码不清楚,我深表歉意,如果有任何问题,请询问。这是我爸爸的工作,我通常设计游戏,我是C#的新手,因此如果我犯了任何错误,请告诉我!将不胜感激

亲切问候朱尔斯·布罗克斯 游戏技术专业学生 荷兰

视频:

如果您需要查看我的数组类,请告诉我

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;
using System.Net;
using Microsoft.VisualBasic;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace JulesIsDeBeste
{
    public partial class Form1 : Form
    {
        Bitmap newBitmap;
        System.Drawing.Image file;
        System.Drawing.Image image;
        System.Drawing.Image symbol1, symbol2, symbol3, symbol4, symbol5, symbol6, symbol7, symbol8, symbol9, symbol10, symbol11, symbol12, symbol13, symbol14, symbol15;
        System.Drawing.Image symbol31, symbol32, symbol33, symbol34, symbol35, symbol36, symbol37, symbol38, symbol39, symbol40, symbol41, symbol42, symbol43, symbol44, symbol45;
        System.Drawing.Image symbol46, symbol47, symbol48, symbol49, symbol50, symbol51, symbol52, symbol53, symbol54, symbol55, symbol56, symbol57, symbol58, symbol59, symbol60;
        System.Drawing.Image symbol61, symbol62, symbol63;

        private bool mouse_down = false;
        private Color col = Color.Black;
        private bool makeLine = false;
        int penwidth = 1;
        Pen blackPen;
        Bitmap bitmap;
        int x1;
        int y1;
        int x2;
        int y2;
        LineClass array = new LineClass();
        DrawIcon icon = new DrawIcon();
        System.Drawing.Image selectedIcon;
        private bool drawicon = false;


        public Form1()
        {
            symbol1 = JulesIsDeBeste.Properties.Resources.dice;
            symbol2 = JulesIsDeBeste.Properties.Resources.das;
            InitializeComponent();
        }

        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {

            DialogResult dr = openFileDialog1.ShowDialog();

            if (dr == DialogResult.OK)
            {
                try
                {
                    file = System.Drawing.Image.FromFile(openFileDialog1.FileName);
                    newBitmap = new Bitmap(openFileDialog1.FileName);
                    pictureBox1.Image = file;
                    pictureBox1.Height = panel1.Height;
                    pictureBox1.Width = panel1.Width;
                    pictureBox1.SizeMode = PictureBoxSizeMode.AutoSize;
                    panel1.Height = file.Height;
                    panel1.Width = file.Width;
                    panel1.BackgroundImage = file;
                    bitmap = new Bitmap(panel1.Width, panel1.Height);
                    panel1.DrawToBitmap(bitmap, new System.Drawing.Rectangle(panel1.ClientSize.Width - panel1.Width, panel1.ClientSize.Height - panel1.Height, panel1.Width, panel1.Height));
                    pictureBox1.Hide();


                }

                catch (Exception)
                {
                    MessageBox.Show("Verkeerde format, kies een Image file", " -->  Error ! <-- ");

                }
            }
        }

        private void saveToolStripMenuItem_Click(object sender, EventArgs e)
        {

            String filename = Microsoft.VisualBasic.Interaction.InputBox("Opslaan als : ", "Wat moet je toch zonder Jules !", "", 250, 250);
            FolderBrowserDialog folderBrowserDialog1 = new FolderBrowserDialog();

            //Choose the default start up folder
            string selectedFolder = @"C:\Dev";

            //Set that into the dialog
            folderBrowserDialog1.SelectedPath = selectedFolder;

            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                //Grab the folder that was chosen
                selectedFolder = folderBrowserDialog1.SelectedPath;

                // The user selected a folder and pressed the OK button.
                // We print the number of files found.                
                string[] files = Directory.GetFiles(selectedFolder);

            }

            String abc = filename + ".pdf";
            panel1.DrawToBitmap(bitmap, new System.Drawing.Rectangle(panel1.ClientSize.Width - panel1.Width, panel1.ClientSize.Height - panel1.Height, panel1.Width, panel1.Height));
            image = bitmap;
            try
            {

                Document doc = new Document();
                doc.SetPageSize(new iTextSharp.text.Rectangle((panel1.ClientSize.Width - panel1.Width), panel1.ClientSize.Height - panel1.Height, panel1.Width, panel1.Height, 0));
                PdfWriter.GetInstance(doc, new FileStream(selectedFolder + "/" + abc, FileMode.Create));
                doc.Open();
                iTextSharp.text.Image pdfImage = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Jpeg);
                doc.Add(pdfImage);
                doc.Close();
                MessageBox.Show("Succesfully Saved At " + selectedFolder);

            }

            catch (Exception)
            {
                //Log error;
            }
        }

        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            x1 = e.X;
            y1 = e.Y;
            mouse_down = true;
        }

        private void panel1_MouseUp(object sender, MouseEventArgs e)
        {

            mouse_down = false;
            if (makeLine)
            {
                array.addToArray(x1, y1, x2, y2, col, penwidth);

            }
            if (drawicon)
            {

                icon.addToArray(x2, y2, selectedIcon);
                panel1.Refresh();
            }


        }

        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {

            toolStripStatusLabel1.Text = e.X + "," + e.Y;
            if (mouse_down == true)
            {

                try
                {

                    x2 = e.X;
                    y2 = e.Y;

                    panel1.Refresh();
                }
                catch (Exception)
                { }
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();
            col = colorDialog1.Color;
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            if (makeLine && !drawicon)
            {

                try
                {
                         blackPen = new Pen(col, penwidth);
                        e.Graphics.DrawLine(blackPen, x1, y1, x2, y2);

                        for (int i = 0; array.linesCount() > i; i++)
                        {
                            blackPen = new Pen(array.getColor(i), array.getPenWidth(i));
                            e.Graphics.DrawLine(blackPen, array.getPointsX1(i), array.getPointsY1(i), array.getPointsX2(i), array.getPointsY2(i));
                        }
                        for (int i = 0; icon.iconCount() > i; i++)
                        {
                            e.Graphics.DrawImage(icon.getIcon(i), icon.getX(i), icon.getY(i));
                        }
                        blackPen = new Pen(col, penwidth);
                }
                catch
                { }
            }

            if (!makeLine && drawicon)
            {
                try
                {
                    e.Graphics.DrawImage(selectedIcon, x2, y2);


                    for (int i = 0; array.linesCount() > i; i++)
                    {
                        blackPen = new Pen(array.getColor(i), array.getPenWidth(i));
                        e.Graphics.DrawLine(blackPen, array.getPointsX1(i), array.getPointsY1(i), array.getPointsX2(i), array.getPointsY2(i));
                    }
                    for (int i = 0; icon.iconCount() > i; i++)
                    {
                        e.Graphics.DrawImage(icon.getIcon(i), icon.getX(i), icon.getY(i));
                    }
                }
                catch
                { }
            }
            if (!makeLine && !drawicon)
            { }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (!makeLine)
            {
                makeLine = true;
                drawicon = false;
                pictureBox2.BackColor = Color.Honeydew;
                button2.ForeColor = Color.Red;

            }
            else
            {
                makeLine = false;
                button2.ForeColor = Color.Black;
            }

        }


        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            penwidth = trackBar1.Value + 1;
        }


        private void splitContainer1_Panel1_Paint(object sender, PaintEventArgs e)
        {
            splitContainer1.Panel1MinSize = 250;
            splitContainer1.Panel1.AutoScroll = true;

        }

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            selectedIcon = symbol1;
            if (!drawicon)
            {
                drawicon = true;
                makeLine = false;
                button2.ForeColor = Color.Black;
                pictureBox2.BackColor = Color.Aquamarine;
            }
            else
            {
                drawicon = false;
                pictureBox2.BackColor = Color.Honeydew;
            }
        }

    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用系统、媒体;
Net系统;
使用Microsoft.VisualBasic;
使用System.Drawing.Drawing2D;
使用系统、绘图、成像;
使用System.IO;
使用iTextSharp.text;
使用iTextSharp.text.pdf;
朱利斯贝斯特酒店
{
公共部分类Form1:Form
{
位图新位图;
System.Drawing.Image文件;
系统、绘图、图像;
系统图图像symbol1、symbol2、symbol3、symbol4、symbol5、symbol6、symbol7、symbol8、symbol9、symbol10、symbol11、symbol12、symbol13、symbol14、symbol15;
系统图图像symbol31、symbol32、symbol33、symbol34、symbol35、symbol36、symbol37、symbol38、symbol39、symbol40、symbol41、symbol42、symbol43、symbol44、symbol45;
系统图图像symbol46、symbol47、symbol48、symbol49、symbol50、symbol51、symbol52、symbol53、symbol54、symbol55、symbol56、symbol57、symbol58、symbol59、symbol60;
System.Drawing.Image symbol61、symbol62、symbol63;
私有bool mouse_down=false;
私有颜色col=颜色。黑色;
private bool makeLine=false;
int-penwidth=1;
黑笔;
位图;
int-x1;
int y1;
int-x2;
int y2;
LineClass数组=新的LineClass();
DrawIcon图标=新的DrawIcon();
系统、绘图、图像选择;
私有布尔图图标=假;
公共表格1()
{
symbol1=julessdeboste.Properties.Resources.dice;
symbol2=julessdebeste.Properties.Resources.das;
初始化组件();
}
私有void openToolStripMenuItem\u单击(对象发送方,事件参数e)
{
DialogResult dr=openFileDialog1.ShowDialog();
if(dr==DialogResult.OK)
{
尝试
{
file=System.Drawing.Image.FromFile(openFileDialog1.FileName);
newBitmap=新位图(openFileDialog1.FileName);
pictureBox1.Image=文件;
图B1.高度=面板1.高度;
pictureBox1.宽度=面板1.宽度;
pictureBox1.SizeMode=PictureBoxSizeMode.AutoSize;
panel1.Height=file.Height;
panel1.Width=file.Width;
panel1.BackgroundImage=文件;
位图=新位图(panel1.Width,panel1.Height);
panel1.DrawToBitmap(位图,新系统.Drawing.Rectangle(panel1.ClientSize.Width-panel1.Width,panel1.ClientSize.Height-panel1.Height,panel1.Width,panel1.Height));
pictureBox1.Hide();
}
捕获(例外)
{

Show(“Verkeerde格式,kies-een图像文件”,"-->错误!没有人会回答这样的问题,把它分开,然后问不同的问题。老实说,我通常都同意,但在他的情况下,我已经阅读了所有相关的问题,并尝试了大约100件几乎相同但对我来说不起作用的事情,因为这个程序与其他任何程序都不一样……我希望有一个好的eno你需要一个撤销/重做系统,为了重新排列形状,你应该在感兴趣的地方画“手柄”来重新定位它们,这样它们对用户友好(否则你必须精确地点击线条)。如果由于每秒移动鼠标很多次,面板没有足够的时间刷新,因此会闪烁,请使用具有双缓冲功能的PictureBox,并且只在合成的位图上绘制最后一行,即每次用户启动新位图时