C#中用Graphics绘制Panel的问题?
我是将一张大的BMP图像分割为4份,左上角图像,右上角图像,左下角图像,右下角图像,这四个图像是有不同的id号,并且有个list<int>记录id,id表示的是这张图片在...
我是将一张大的BMP图像分割为4份,左上角图像,右上角图像,左下角图像,右下角图像,这四个图像是有不同的id号,并且有个list<int>记录id ,id表示的是这张图片在那个panel显示,
比如:list中为,2,3,4,5,那么BMP的四个部分分别显示在panel2,panel3,panel4,panel5中,
我的思路是这样的:
我现在有个panel_control包裹着这个所有的需要用来显示图片的 pannel
Control.ControlCollection c= this.panel_control.Controls;//获取panel_control中的集合
for (int i = 0; i <4; i++)
{
foreach (Control item in c)//在panel集合中查找
{
try {
Panel p = (Panel)item;
if (p.Name.Equals("panel" + (listInt[i] + 1).ToString()))如果panel的名字id和list中一样
{
Graphics g = p.CreateGraphics();
g.DrawImage(bit, new Rectangle(0, 0, p.Width, p.Height), new Rectangle(bit.Width / 2 * (i % 2), bit.Height / 2 * (i / 2), bit.Width / 2, bit.Height / 2), GraphicsUnit.Pixel);//将bitmap中对应的1/4给绘制出来
g.Dispose();
break;
}
}catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
这样的思路对吗?
为什么绘制结果有问题 展开
比如:list中为,2,3,4,5,那么BMP的四个部分分别显示在panel2,panel3,panel4,panel5中,
我的思路是这样的:
我现在有个panel_control包裹着这个所有的需要用来显示图片的 pannel
Control.ControlCollection c= this.panel_control.Controls;//获取panel_control中的集合
for (int i = 0; i <4; i++)
{
foreach (Control item in c)//在panel集合中查找
{
try {
Panel p = (Panel)item;
if (p.Name.Equals("panel" + (listInt[i] + 1).ToString()))如果panel的名字id和list中一样
{
Graphics g = p.CreateGraphics();
g.DrawImage(bit, new Rectangle(0, 0, p.Width, p.Height), new Rectangle(bit.Width / 2 * (i % 2), bit.Height / 2 * (i / 2), bit.Width / 2, bit.Height / 2), GraphicsUnit.Pixel);//将bitmap中对应的1/4给绘制出来
g.Dispose();
break;
}
}catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
}
这样的思路对吗?
为什么绘制结果有问题 展开
3个回答
展开全部
public void Draimg()
{
Image img = Image.FromFile(@"Img\1.png");
Point[] point ={
new Point(){X=-img.Height/2,Y=-img.Width/2},
new Point(){X=-img.Width/2,Y=0},
new Point(){X=0,Y=-img.Height/2},
new Point(){X=0,Y=0}
};
for (int i = 0; i < panel1.Controls.Count; i++)
{
if(panel1.Controls[i] is Panel)
{
Panel p= panel1.Controls[i] as Panel;
Graphics g = p.CreateGraphics();
//将bitmap中对应的1/4给绘制出来
g.DrawImage(img, point[i]);
}
}
//int i=-1;
//foreach (Control item in panel1.Controls)
//{
// if (item is Panel)
// {
// i++;
// Panel p = item as Panel;
// Graphics g = p.CreateGraphics();
// //将bitmap中对应的1/4给绘制出来
// g.DrawImage(img,point[i]);
// }
// else
// {
// return;
// }
//}
}
原因我已经找到!
Panel控件 里面大概有这么一个集合
panel1.Controls 控件集合
这可能是堆栈的问题
当你在panel1控件添加子控件时
添加顺序为
panel2
panel4
panel5
那么实际读取顺序是
panel5
panel4
panel2
所以要看好你添加控件的顺序
{
Image img = Image.FromFile(@"Img\1.png");
Point[] point ={
new Point(){X=-img.Height/2,Y=-img.Width/2},
new Point(){X=-img.Width/2,Y=0},
new Point(){X=0,Y=-img.Height/2},
new Point(){X=0,Y=0}
};
for (int i = 0; i < panel1.Controls.Count; i++)
{
if(panel1.Controls[i] is Panel)
{
Panel p= panel1.Controls[i] as Panel;
Graphics g = p.CreateGraphics();
//将bitmap中对应的1/4给绘制出来
g.DrawImage(img, point[i]);
}
}
//int i=-1;
//foreach (Control item in panel1.Controls)
//{
// if (item is Panel)
// {
// i++;
// Panel p = item as Panel;
// Graphics g = p.CreateGraphics();
// //将bitmap中对应的1/4给绘制出来
// g.DrawImage(img,point[i]);
// }
// else
// {
// return;
// }
//}
}
原因我已经找到!
Panel控件 里面大概有这么一个集合
panel1.Controls 控件集合
这可能是堆栈的问题
当你在panel1控件添加子控件时
添加顺序为
panel2
panel4
panel5
那么实际读取顺序是
panel5
panel4
panel2
所以要看好你添加控件的顺序
展开全部
个人觉得是g.DrawImage这行有错,为了测试,把这句换成简单地输出字符串看
e.Graphics.DrawString(i.ToString(), new Font("宋体", 30), Brushes.Red, 10, 10);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-04-08
展开全部
绘制出来的结果有什么问题?
追问
比如说现在的四张图分别是1,2,3,4号panel对应的
绘制结果就成了2,3,4,1,顺序不对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询