C#如何定义一个公共画板跟画布,让其他控件可以同时调用

qq_37282154 2019-05-14 07:50:42
或者有没有大神可以指点一下我,我现在在做一个拼图软件,我想创建一个公共的画布,让其他Picturebox 可以同时调用这个画布,比如2X2的拼图格式,我就把这画布平均分为四个部分,每加入一副图片,就在这公共画布的四分之一区域加入一副图片,如图所示

但是我不会知道如何定义一个公共的画布 目前只能在一个单独的事件里单独的创建一个画板,我添加第二个图片就变成这样,如图所示

这是我的代码:

private void PictureBox1_Click(object sender, EventArgs e)
{
OpenFileDialog file = new OpenFileDialog();
file.InitialDirectory = ".";
file.Filter = "图片格式(*.jpg)|*.jpg|(*.bmp)|*.bmp|(*.png)|*.png";
file.ShowDialog();
if (file.FileName != string.Empty)
{
try
{
pathname1 = file.FileName;   //获得文件的绝对路径
                    this.PictureBox1.Load(pathname1);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
SaveFileDialog save = new SaveFileDialog();
}
string str1 = pathname1;
str1.Replace(@"\","/");



Image img1 = Image.FromFile(""+str1+"");
Bitmap map1 = new Bitmap(img1);


var width = img1.Width;
var height = img1.Height; ;
// 初始化画布(最终的拼图画布)并设置宽高
Bitmap bitMap = new Bitmap(width*2, height*2);
// 初始化画板
Graphics g1 = Graphics.FromImage(bitMap);
// 将画布涂为白色(底部颜色可自行设置)
g1.FillRectangle(Brushes.White, new Rectangle(0, 0, width, height));
//在x=0,y=0处画上图一
g1.DrawImage(map1, 0, 0, img1.Width, img1.Height);
//在x=0,y在图一往下10像素处画上图二

map1.Dispose();
// map2.Dispose();
Image img = bitMap;
pictureBox3.Image = img;
textBox1.Text = pathname1;
}

private void PictureBox2_Click(object sender, EventArgs e)
{
OpenFileDialog file = new OpenFileDialog();
file.InitialDirectory = ".";
file.Filter = "图片格式(*.jpg)|*.jpg|(*.bmp)|*.bmp|(*.png)|*.png";
file.ShowDialog();
if (file.FileName != string.Empty)
{
try
{
pathname2 = file.FileName;   //获得文件的绝对路径
                    this.pictureBox2.Load(pathname2);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
SaveFileDialog save = new SaveFileDialog();

string str2 = pathname2;
str2.Replace(@"\", "/");

Image img2 = Image.FromFile("" + str2 + "");
Bitmap map2 = new Bitmap(img2);
var width = img2.Width;
var height = img2.Height; ;
Bitmap bitMap = new Bitmap(width * 2, height * 2);
// 初始化画板
Graphics g1 = Graphics.FromImage(bitMap);

g1.DrawImage(map2, 0,height, img2.Width, img2.Height);
map2.Dispose();
Image img = bitMap;
pictureBox3.Image = img;

}
}
麻烦各位指点一下
...全文
3452 36 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
杀神2014 2019-05-17
  • 打赏
  • 举报
回复
我是来拜大神的
袁承旭 2019-05-17
  • 打赏
  • 举报
回复
这个问答节奏可以啊,一片和谐
性本丘山 2019-05-17
  • 打赏
  • 举报
回复
都是大神啊啊啊啊啊啊啊啊
不断提高 2019-05-16
  • 打赏
  • 举报
回复
高手,我现在正在打算做 希望出效果 带你分享
wilson1966 2019-05-16
  • 打赏
  • 举报
回复
哇,有神快拜
ymmsfp 2019-05-16
  • 打赏
  • 举报
回复
真的有高手,感谢了,我也跟着学习学习!
qq_37282154 2019-05-15
  • 打赏
  • 举报
回复
引用 10 楼 智者知已应修善业 的回复:
你没认真去看我提供的参考,希望写好的直接复制使用?觉得你有点舍本逐末了,要设置一个公共画布变量是很简单的一句代码而已:

        public Form1()
        {
            InitializeComponent();
            
        }
        Bitmap 公共画布 = new Bitmap(1, 1);PictureBox 显示图片 = new PictureBox();
而忘记了关键的部分是要去实现几张图要画的位置的参数要自己去修改:
目标画布.DrawImage(缩略图, new Rectangle((目标.Width - 缩略图.Width) / 2, (目标.Height - 缩略图.Height) / 2, 缩略图.Width, 缩略图.Height),
                        new Rectangle(0, 0, 缩略图.Width, 缩略图.Height), GraphicsUnit.Pixel);
况且我要写是不会用多个PictureBox控件的,打开一个图的代码你自己已经有了,所以还是你自己去参考代码去实现.
非常感谢!我会好好参考您的代码的!
  • 打赏
  • 举报
回复
你没认真去看我提供的参考,希望写好的直接复制使用?觉得你有点舍本逐末了,要设置一个公共画布变量是很简单的一句代码而已:

        public Form1()
        {
            InitializeComponent();
            
        }
        Bitmap 公共画布 = new Bitmap(1, 1);PictureBox 显示图片 = new PictureBox();
而忘记了关键的部分是要去实现几张图要画的位置的参数要自己去修改:
目标画布.DrawImage(缩略图, new Rectangle((目标.Width - 缩略图.Width) / 2, (目标.Height - 缩略图.Height) / 2, 缩略图.Width, 缩略图.Height),
                        new Rectangle(0, 0, 缩略图.Width, 缩略图.Height), GraphicsUnit.Pixel);
况且我要写是不会用多个PictureBox控件的,打开一个图的代码你自己已经有了,所以还是你自己去参考代码去实现.
  • 打赏
  • 举报
回复
链接已经给了何须多问?!
qq_37282154 2019-05-15
  • 打赏
  • 举报
回复
引用 7 楼 智者知已应修善业 的回复:
合并图片思路不止一种,实现手段也不止一种,其实要实现有两个功能要实现,并非一定要个公共画布,两个功能是1缩略图2合并图片. 缩略图推荐之前找到的参考https://blog.csdn.net/u010028869/article/details/43635903 合并图推荐比较简洁的参考https://blog.csdn.net/xujingcheng123/article/details/79991713 至于你要用什么控件什么方式进行设计你的软件就看你自己了.
是的,只是现在我想用公共画布完成一下这个功能,不知大神可否写一段代码示范一下,因为C#我只是略懂皮毛,感激不尽。
  • 打赏
  • 举报
回复
我写的输出多个图片也有https://blog.csdn.net/xianfajushi/article/details/9469353#comments都可以参考,重写一个未必就是你想要的东西,但是参考代码还是很有必要的.
  • 打赏
  • 举报
回复
合并图片思路不止一种,实现手段也不止一种,其实要实现有两个功能要实现,并非一定要个公共画布,两个功能是1缩略图2合并图片. 缩略图推荐之前找到的参考https://blog.csdn.net/u010028869/article/details/43635903 合并图推荐比较简洁的参考https://blog.csdn.net/xujingcheng123/article/details/79991713 至于你要用什么控件什么方式进行设计你的软件就看你自己了.
qq_37282154 2019-05-15
  • 打赏
  • 举报
回复
引用 30 楼 智者知已应修善业 的回复:
看我的博客把文字一样画到图片指定位置即可。
大神 是哪一篇,你这博客都能写书了,太多了不好找!哈哈 链接可以给我吗
  • 打赏
  • 举报
回复
看我的博客把文字一样画到图片指定位置即可。
weixin_45072717 2019-05-15
  • 打赏
  • 举报
回复
非常好的帖子大爱!!!!!!!!
qq_37282154 2019-05-15
  • 打赏
  • 举报
回复
引用 23 楼 智者知已应修善业 的回复:
那是你原图大小不规则不是250*250的
对了大神,再请教您一个问题,加入标签这个功能可以这么实现呢? 利用textbox 传入一串文字 然后显示在画板上 #1 #2 #3 都是独立的
qq_37282154 2019-05-15
  • 打赏
  • 举报
回复
引用 22 楼 智者知已应修善业 的回复:
另外你使用pictureBox1.Image 那根本就不需要什么公共画布!,何必画蛇添足?直接就:

pictureBox1.Image = new Bitmap(500, 500);
即可.

        private void Form1_Load(object sender, EventArgs e)
        {
            PictureBox 显示图片 = new PictureBox();
            显示图片.Image = new Bitmap(500, 500);
            Graphics.FromImage(显示图片.Image).Clear(Color.Red);
            显示图片.Image = 拼图(打开图片(), 显示图片.Image, 0, 0);
            显示图片.Parent = this;
            显示图片.Size = new System.Drawing.Size(500, 500);
            显示图片.Image = 拼图(打开图片(), 显示图片.Image, 0, 200);
        }
非常感谢大神!太厉害了,今天学到太多东西了。
流浪的鱼1 2019-05-15
  • 打赏
  • 举报
回复
厉害啊,就大幅度技术尽快!
  • 打赏
  • 举报
回复
那是你原图大小不规则不是250*250的
  • 打赏
  • 举报
回复
另外你使用pictureBox1.Image 那根本就不需要什么公共画布!,何必画蛇添足?直接就:

pictureBox1.Image = new Bitmap(500, 500);
即可.

        private void Form1_Load(object sender, EventArgs e)
        {
            PictureBox 显示图片 = new PictureBox();
            显示图片.Image = new Bitmap(500, 500);
            Graphics.FromImage(显示图片.Image).Clear(Color.Red);
            显示图片.Image = 拼图(打开图片(), 显示图片.Image, 0, 0);
            显示图片.Parent = this;
            显示图片.Size = new System.Drawing.Size(500, 500);
            显示图片.Image = 拼图(打开图片(), 显示图片.Image, 0, 200);
        }
加载更多回复(16)

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧