[C#] GDI+能实现PNG格式背景图片的透明吗?

  能实现,以下为步骤:
  1、IntPtr代表指针变量,是c#的基本类型。
  2、BLENDFUNCTION是我定义的结构体,用于对应UpdateLayeredWindow这个API函数的BLENDFUNCTION类型参数:定义如下,UpdateLayeredWindow函数下面有说。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct BLENDFUNCTION
{
public byte BlendOp;
public byte BlendFlags;
public byte SourceConstantAlpha;
public byte AlphaFormat;
}
  3、SelectObject是API函数,这里把其作为常函数定义在Win32API这个类里面,作用是将对象选进DC。具体怎么在c#里面引用API函数,可以参考MSDN
  [DllImport("gdi32.dll", ExactSpelling = true)]
public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
  4、UpdateLayeredWindow也是API函数,定义在Win32API这个类里面,作用是把设置窗口的透明度或透明方式(Alapha还是透明指定颜色),下面是这个函数在c#里面引用的方法。
[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
public static extern Bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref Point pptDst, ref Size psize, IntPtr hdcSrc, ref Point pprSrc, Int32 crKey, ref BLENDFUNCTION pblend, Int32 dwFlags);
  5、createParams.ExStyle |= 0x80000;是为了把窗口设为Layer窗口,一定要设置这个,不然窗口无法透明。其实这是API里面的CreateWindowEx函数创建窗口时用的扩展属性,可以参考MSDN。

可以的,不过一定要使用API来做。先把窗口设为Layer窗口,在form中重写CreateParams属性,如下:
protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle |= Win32API.0x80000;
return createParams;
}
}
再用UpdateLayeredWindow设置一下要重绘的透明图片,范例如下,用到的API和结构要自己查MSDN哦:
IntPtr screenDc = Win32API.GetDC(IntPtr.Zero);
IntPtr memDc = Win32API.CreateCompatibleDC(screenDc);
IntPtr hBitmap = IntPtr.Zero;
IntPtr hOldBitmap = IntPtr.Zero;

try
{
hBitmap = bitmap.GetHbitmap(Color.FromArgb(0));
hOldBitmap = Win32API.SelectObject(memDc, hBitmap);

Win32API.Size newSize = new Win32API.Size(bitmap.Width, bitmap.Height);
Win32API.Point sourceLocation = new Win32API.Point(0, 0);
Win32API.Point newLocation = new Win32API.Point(this.Left, this.Top);
Win32API.BLENDFUNCTION blend = new Win32API.BLENDFUNCTION();
blend.BlendOp = 0x00;
blend.BlendFlags = 0;
blend.SourceConstantAlpha = 255;
blend.AlphaFormat = 0x00;
Win32API.UpdateLayeredWindow(Handle, screenDc, ref newLocation, ref newSize,
memDc, ref sourceLocation, 0, ref blend, 0x02);
}
finally
{
Win32API.ReleaseDC(IntPtr.Zero, screenDc);
if (hBitmap != IntPtr.Zero)
{
Win32API.SelectObject(memDc, hOldBitmap);
Win32API.DeleteObject(hBitmap);
}
Win32API.DeleteDC(memDc);
}

关于您上次回答的“[C#] GDI+能实现PNG格式背景图片的透明”~

1.IntPtr代表指针变量,是c#的基本类型
2.BLENDFUNCTION是我定义的结构体,用于对应UpdateLayeredWindow这个API函数的BLENDFUNCTION类型参数:定义如下,UpdateLayeredWindow函数下面有说。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct BLENDFUNCTION
{
public byte BlendOp;
public byte BlendFlags;
public byte SourceConstantAlpha;
public byte AlphaFormat;
}
3.SelectObject是API函数,我这里把它作为常函数定义在Win32API这个类里面,作用是将对象选进DC。我将它的c#引用方法也给你吧,具体怎么在c#里面引用API函数,可以参考MSDN
[DllImport("gdi32.dll", ExactSpelling = true)]
public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hObject);
4.UpdateLayeredWindow也是API函数,定义在Win32API这个类里面,作用是把设置窗口的透明度或透明方式(Alapha还是透明指定颜色),下面是这个函数在c#里面引用的方法。
[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
public static extern Bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref Point pptDst, ref Size psize, IntPtr hdcSrc, ref Point pprSrc, Int32 crKey, ref BLENDFUNCTION pblend, Int32 dwFlags);
5.createParams.ExStyle |= Win32API.0x80000这句写错了,
应该是:createParams.ExStyle |= 0x80000;是为了把窗口设为Layer窗口,一定要设置这个,不然窗口无法透明。其实这是API里面的CreateWindowEx函数创建窗口时用的扩展属性,可以参考MSDN。

1.wpf
2.只能用那个Layer了

#19143125090# C#想利用GDI+将文字转成图片,效果如下图,文字一定要粘住边,该怎么实现? - ******
#张窦# 我记得label里有个方法可以测量字符串所占像素宽度的 int size = new Label().CreateGraphics().MeasureString(text, font); 参数text是文本,font是文本格式,至于字符串所占像素高度的话好解决,跟font里的字体大小成比例的.用GDI+写完字符串后,根据高度和宽度再画个正方形.

#19143125090# c#里面怎么使用gdi的库? - ******
#张窦# 不知道你说的GDI算不算GDI+.这样说吧======调用GDI+ 很简单,System.Drawing命名空间就是为GDI+而设计的,用Graphics类进行Draw/Fill函数,就是调用GDI+======调用GDI NET中绘图多是GDI+的,但也有托管下的GDI函数,比如TextRender类就是GDI的,(因为GDI+的DrawString绘图不精准,因此NET 2.0引入了GDI的TextRender) 也可以直接调用Windows API中的GDI,用DllImport链接gdi32.dll,调用里面的函数就可以了.

#19143125090# C# WINDOWSFORM 如何生成表格图片呢? - ******
#张窦# 使用GDI+可以实现:一种方式是直接截取表格内容区域生成图片,另外一种通过GDI+来完成绘制表格数据生成图片!

#19143125090# C# GDI+绘图 - ******
#张窦# 你可以将绘制的图片赋给picturebox控件,然后直接对picturebox控件进行操作就可以了.例子: Bitmap bm = new Bitmap(60,30); Graphics g= Graphics.FromImage(bm);g.Clear(Color.FromArgb(192,192,255));g.DrawString("要绘制的文字", ...

#19143125090# 关于C#GDI绘制表格 - ******
#张窦# 计算每个格的位置,直接DrawString,可以指定字体,颜色,对齐方式等

#19143125090# C#Bitmap是干什么用的?能帮我解释下吗? - ******
#张窦# c#.net Bitmap类的基本使用方法 http://download.csdn.net/source/1002902 Bitmap 类 更新:2007 年 11 月 封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成.Bitmap 是用于处理由像素数据定义的图像的对象.命名空间: System....

#19143125090# (C#)GDI绘制的图如何保存成图片 - ******
#张窦# 绘制到Bitmap上Bitmap bit=new Bitmap(200,200,PixelFormat.Format32bppArgb);//设置长宽 using (var g=Graphics.FromImage(bit)) { //这里绘图 g.Flush(); } bit.Save("0.png");

#19143125090# C#中,GDI+的一点提问,关于image.save() - ******
#张窦# 将此图像以指定的格式保存到指定的流中. 名称说明 Image.Save (String)将该 Image 保存到指定的文件或流. Image.Save (Stream, ImageFormat)将此图像以指定的格式保存到指定的流中. 由 .NET Compact Framework 支持. Image...

#19143125090# C#的GDI画图问题 - ******
#张窦# 没有清空画布 就会保留上次的绘画记录加上这一句 里面忘了有没有参数了 如果有 可以添加清空后的颜色sIma.Clear();

#19143125090# C# GDI+ 画图问题 - ******
#张窦# Graphics g = this.CreateGraphic();即可 this即为你的窗体类

  • 英文字母c的发音
  • 答:音标: [si:]字母c介绍:1、英语字母中的第三个字母,大写为C,小写为c 2、(用大写C)丙等(成绩)3、可数名词, 用[C]表示=countable noun (oppo.相对应的,不可数名词用[U]表示=uncountable noun)字母C的产生可能是...

  • c的音标发音分别是?
  • 答:c / k / cat,cut,cost,card。c / s / city,circle,century。部分音标的发音技巧:[c:] 嘴唇微微张开,舌尖抵下齿,嘴角向两边张开,露出微笑的表情,与字母E的发音相同。

  • 英语里[C],[C,U]代表什么意思?
  • 答:[C]是可数名词,一般包括个体名词和集体名词,来源于单词count(可数的)[U]是不可数名词,一般包括物质名词和抽象名词,来源于单词uncount(不可数的)[C,U]表示此名词既可以做可数名词也可以做不可数名词。名词根据其可数性可...

  • 参考文献的[C]什么意思
  • 答:C表示该参考文献类别属于论文集 根据GB3469-83《文献类型与文献载体代码》规定,各类常用文献以单字母标识:M——专著(含古籍中的史、志论著)C——论文集 N——报纸文章 J——期刊文章 D——学位论文 R——研究报告 S...

  • C的音标是什么
  • 答:英语发音:/siː/ C(字母符号)排名:第三个字母 大写:C 小写:c 由来:字母C的产生可能是由于一个投掷棒的符号,像在古埃及的象形文字里字母C的发展史并很早出现在闪族的书面当中-大约在公元前1500年的西奈半岛...

  • 字母c的发音规则是什么呢?
  • 答:字母c的发音规则口诀:ci、ce紧相连,c发[s]音记心间。其它形式莫忘记,c发[k]音最常见。c在字母e,i或y前面时发音[s],单词举例:city c在字母a,o或u,或者在辅音字母前发音[k],单词举例:cup c在词尾时也...

  • “C”的正确发音是什么?
  • 答:正确发音为:[si:] ,为26位英文字母的第三位。c开头的英文单词及释义:1 cab n. (美)出租车 2 cabbage n. 卷心菜,洋白菜 3 cafe n. 咖啡馆; 餐馆 4 cafeteria n. 自助餐厅 5 cage n 笼;鸟笼 6 cake n...

  • c怎么写?
  • 答:(1)应按照字母的笔顺和字母在三格中应占的位置书写。(2)每个字母都应稍向右倾斜,约为5°,斜度要一致。(3)大写字母都应一样高,占上面两格,但不顶第一线。(4)小写字母a,c,e,m,n,o,r,s,u,v...

  • 什么是C?
  • 答:C是组合,与次序无关,A是排列,与次序有关;C的意思就是没有排列,组合到一起就行,与他们的次序没有关系;A的排列,就是有排列顺序。C是组合,就是给你N个选择,你从中选择出不重复的K个,这就组合,比如说有一...

  • 发音/c/的有哪些单词
  • 答:英语中没有/c/这个音标。字母c的发音规则有:1、在e、i、y前发/s/如:city城市、rice大米、pencil铅笔、face脸 2、在弱读字母ia、ie、io、iu前发 / ʃ/如:beautician美容师、optician眼镜商、clinician临床医生 ...

    为传递更多家电数码信息,若有事情请联系
    数码大全网