C#:堆叠和移动透明图像

时间:2014-02-20 16:27:44

标签: c# .net image transparency alpha

我对C#和.NET库相当陌生,将一个项目放在一起让自己更熟悉它。我要做的是创建一个带有背景图像的形式(一个“地图”),在它上面放置较小的图像(“数字”,游戏棋子),可以被拖动,整个事情可以放大/缩小。在我试图支持透明图像之前,这一切都很美妙。如果我能支持具有透明背景(用于图形)和具有alpha图层的图像(用于地图叠加,如天气效果等)的图像,那将是很棒的。

我正在为我的所有图像使用PictureBox控件,每次地图或图形放大或拖动时(每次鼠标移动时)我都会重绘整个事物。我所做的所有“支持”透明度都将数字'BackColor设置为Color.Transparent并将其父级设置为地图的PictureBox控件。由此产生的错误是:当我没有触摸地图时,数字的透明度确实有效,但是当我拖动地图或图形时,它不重绘图形的图像,直到我停止移动并且它扭曲即使图形没有透明度,该区域(看起来我正在Doom的墙壁上剪裁)图像结束了。

图形,图形文件等是我的弱点之一,所以我真的不知道这里发生了什么。如果有人有任何关于如何解决这个问题的想法,或者只是为了使所有工作更加顺利(除了PictureBox之外还有其他图像控件我应该看看吗?),我们将不胜感激。我所知道的另一个小问题是,如果我要重叠两个透明的数字,他们会互相覆盖,我只会看到背景图像,所以也许我只是走错了方向。

提前致谢。

编辑:在下面添加我的渲染函数,只要移动或创建任何Map / Figure对象(MouseMove和MouseWheel事件),就会调用它。

    //This method is attached to my "Map" class.
    //The "control" variables are PictureBoxes; I should probably have the Map/Figure classes extend PictureBox instead of that, though.
    public void Render()
    {
        this.control.Image = this.background;
        this.control.Width = (int)(this.background.Width * Scalar());
        this.control.Height = (int)(this.background.Height * Scalar());
        this.control.Location = new Point(offset.X, offset.Y);
        foreach (Figure figure in this.figures)
        {
            figure.control.Location = new Point(this.control.Location.X + System.Convert.ToInt32(figure.offset.X * Scalar()), this.control.Location.Y + System.Convert.ToInt32(figure.offset.Y * Scalar()));
            figure.control.Width = System.Convert.ToInt32(figure.base_size.Width * Scalar());
            figure.control.Height = System.Convert.ToInt32(figure.base_size.Height * Scalar());
        }
    }

0 个答案:

没有答案