我用Adobe Illustrator做了一副矢量图,保存为emf格式.
在VS.NET 2003 中新建一个UserControl,在重写OnPaint方法如下:
MetaFile metaFile = new MetaFile("C:\1.emf");
e.Graphics.DrawImage(metaFile,e.ClipRectangle);
这样描绘出来的图象背景是不透明的
用了SetStyle(ControlStyles.SupportTransparent,true)后将控件BackColor = Color.Transparent也无效
设定Form的TransparencyKey为控件的背景色,也无效.
转换成Bitmap后MakeTransparent(bitMap.GetPixel(1,1))还是无效......
emf文件本身是背景透明的,不用转换成什么gif格式,因为转换了就不是矢量图了.
但是在控件上画出来就成了背景不透明了,谁能帮我啊?

解决方案 »

  1.   

    PictureBox效果一样...
    我估计是控件执行Paint之后,背景色透明只是把背景色和控件的Parent的背景色设为一致,但是仍然会遮蔽其它控件...或者那位高手能告诉我怎么获取一个图元(MetaFile)的GraphicsPath?
    这样是可以解决的.
      

  2.   

    测试后是透明的,不过我的是VS2005,楼主升级个看看吧
    private void button1_Click(object sender, EventArgs e)
    {
        Metafile vMetafile = new Metafile(@"c:\temp\temp.emf");
        Graphics vGraphics = pictureBox1.CreateGraphics();
        vGraphics.DrawImage(vMetafile, 0, 0, 100, 100);
        vGraphics.Dispose();
    }
      

  3.   

    zswang,你的方法我也用过了,显示出来是什么都没有,用鼠标拖动几次,缩放几次,让它多Invalidate()几次后,发现图还是画出来的,不过马上就没有了...
    用PictureBox来承载图象是可以背景透明,但是只是背景色和this.Parent的背景色相同而已
    如果用SetStyle(ControlStyles.Opaque,true)来设置的话,控件背景透明直接穿透父窗体,造成界面混乱...
    后来自己找到解决方法了,谢谢各位.