代码之家  ›  专栏  ›  技术社区  ›  Dark Star1

如何在PictureBox中定义的区域内显示图像?

  •  0
  • Dark Star1  · 技术社区  · 15 年前

    作为上一个问题的后续步骤,我已经得到了我的区域,但在过去的两个小时里,我一直在尝试仅显示与该区域相连的微小图片;最终目标是能够随意显示我选择的任何数量的图像。 到目前为止,这是我的代码:

        void OnPaintRadar(Object sender, PaintEventArgs e)
    {
        Graphics g = e.Graphics;        
        Bitmap blip = new Bitmap(tst_Graphics.Properties.Resources.dogtag);
        Rectangle radar_rect = new Rectangle(myRadarBox.Left + 80, myRadarBox.Left + 7, myRadarBox.Width - 200, myRadarBox.Height + 200);
        using (Pen drw_pen = new Pen(Color.White, 1) )
        {
            using (GraphicsPath path = new GraphicsPath())
            {
                path.AddPie(radar_rect, 180, 180);
                path.CloseFigure();
                using (Region rdRegion = new Region(path) )
                {
                    g.DrawPath(drw_pen, path);
                    g.Clip = rdRegion;
                    PictureBox pb = new PictureBox();
                    pb.Image = (blip);
                    pb.Size = blip.Size;
                    g.DrawImage(blip, radar_rect);
                }
            }
    
        }
    
    }// end paint method
    

    我也尝试过DrawImageUnscaled方法,但是我要么放大一张小图片来填充馅饼区域,要么什么也不显示。

    2 回复  |  直到 15 年前
        1
  •  1
  •   MusiGenesis    15 年前

    Click here 运行一个示例应用程序,演示如何执行雷达的基本操作(至少是一种方法)。注意:这个应用程序不会对微小图像进行双重缓冲或透明处理。

    项目的源代码是 here .

        2
  •  1
  •   MusiGenesis    15 年前

    这条线:

    pb.Image = (blip);
    

    是什么导致微小的图像看起来很大。基本上,从资源中提取一个小位图,然后将PictureBox的Image属性设置为该位图(我假设“pb”是表单上的PictureBox)。试着把那一行和它下面的那一行注释掉。