C#中DrawImage(emf矢量图),如何背景透明?

Airoc 2007-11-10 11:59:10
我用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格式,因为转换了就不是矢量图了.
但是在控件上画出来就成了背景不透明了,谁能帮我啊?
...全文
1664 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
momo_dongwon 2008-08-06
  • 打赏
  • 举报
回复
那你是怎么解决的呢?能说一下吗?
Airoc 2007-11-13
  • 打赏
  • 举报
回复
zswang,你的方法我也用过了,显示出来是什么都没有,用鼠标拖动几次,缩放几次,让它多Invalidate()几次后,发现图还是画出来的,不过马上就没有了...
用PictureBox来承载图象是可以背景透明,但是只是背景色和this.Parent的背景色相同而已
如果用SetStyle(ControlStyles.Opaque,true)来设置的话,控件背景透明直接穿透父窗体,造成界面混乱...
后来自己找到解决方法了,谢谢各位.
王集鹄 2007-11-12
  • 打赏
  • 举报
回复
测试后是透明的,不过我的是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();
}
losedxyz 2007-11-11
  • 打赏
  • 举报
回复
关注
chenmingxing123 2007-11-10
  • 打赏
  • 举报
回复
不好意思,对GDI+不了解
Airoc 2007-11-10
  • 打赏
  • 举报
回复
PictureBox效果一样...
我估计是控件执行Paint之后,背景色透明只是把背景色和控件的Parent的背景色设为一致,但是仍然会遮蔽其它控件...



或者那位高手能告诉我怎么获取一个图元(MetaFile)的GraphicsPath?
这样是可以解决的.
cpio 2007-11-10
  • 打赏
  • 举报
回复

用PictureBox呢?
cpio 2007-11-10
  • 打赏
  • 举报
回复

用PictureBox呢?
Airoc 2007-11-10
  • 打赏
  • 举报
回复
没关系,谢谢你帮我顶
基于C#的典型像处理算法 第二章: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; //using System.Drawing.Drawing2D; namespace gray { public partial class Form1 : Form { public Form1() { InitializeComponent(); myTimer = new HiPerfTimer(); } private void open_Click(object sender, EventArgs e) { OpenFileDialog opnDlg = new OpenFileDialog(); opnDlg.Filter = "所有像文件 | *.bmp; *.pcx; *.png; *.jpg; *.gif;"+ "*.tif; *.ico; *.dxf; *.cgm; *.cdr; *.wmf; *.eps; *.emf|" + "位( *.bmp; *.jpg; *.png;...) | *.bmp; *.pcx; *.png; *.jpg; *.gif; *.tif; *.ico|" + "矢量( *.wmf; *.eps; *.emf;...) | *.dxf; *.cgm; *.cdr; *.wmf; *.eps; *.emf"; opnDlg.Title = "打开像文件"; opnDlg.ShowHelp = true; if (opnDlg.ShowDialog() == DialogResult.OK) { curFileName = opnDlg.FileName; try { curBitmap = (Bitmap)Image.FromFile(curFileName); } catch (Exception exp) { MessageBox.Show(exp.Message); } } Invalidate(); } private void save_Click(object sender, EventArgs e) { if(curBitmap == null) { return; } SaveFileDialog saveDlg = new SaveFileDialog(); saveDlg.Title = "保存为"; saveDlg.OverwritePrompt = true; saveDlg.Filter = "BMP文件 (*.bmp) | *.bmp|" + "Gif文件 (*.gif) | *.gif|" + "JPEG文件 (*.jpg) | *.jpg|" + "PNG文件 (*.png) | *.png"; saveDlg.ShowHelp = true; if(saveDlg.ShowDialog() == DialogResult.OK) { string fileName = sav

110,548

社区成员

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

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

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