Ⅰ gdi 怎么用
会员费用:每月10美金。按照2008年8月27日的中间价,大概相当于68.45元人民币,一年下来就是821.4元。注意,这只是给传销公司的缴费,自己其实还要开通ADSL宽带上网,还要买电脑,这些费用估计在3000-5000之间吧。
传销形式:典型的网络老鼠会,金字塔式,拼命发展下线。
特点:与传统传销不同的是,这种传销形式一定要借助互联网来完成。对于不上网的人,只能当面说服拉动,最终还是要让他(她)上网,无意中帮电信发展了不少ADSL用户,壮大了网民队伍。呵呵:-)
揭底:说白了,就是拿着一个垃圾东西当作产品,一棒一棒往下交接,直到系统崩溃为止,那个时候,刚刚入夥的傻人就是牺牲品了。为什么说.WS域名是垃圾?目前国际流行的域名是.com,.net域名,国内流行的是.cn域名,这个.WS域名,仅仅是太平洋岛上一个弹丸小国萨摩亚的域名。眼下比较贵的域名,也就一百多块人民币一年,.cn域名甚至只要1元人民币就可以注册。而.ws域名,作为这个GDI的传销产品,却要800多元人民币一年,这不是抢钱是什么?
为了便于传销,始作俑者特别发明了每个月付款的形式,以摊薄费用,让加入的人感觉代价很低。其实,这是世界上最贵和最没有用的域名了。传销者还说,WS是website的缩写,所以很名贵,其实,英文缩写多了去了,根本不沾边的事情,连大家前期一致看好的域名.ME,到现在推广也是马马虎虎,没有真正能用起来呢。
入这个老鼠会的人,必须要先买一个属于自己的.ws域名,然后利用GDI公司提供的自助建站系统,可以轻松建立一个宣传这个产品的忽悠人的网站,其实这个自助建设的站,每个人都是一样的,就是域名和落款的人名、电话等联系方式不同而已,以此来区分小老鼠是谁发展出来的,钱分给谁而已。也就是说,你买了这个域名,并不能自己用来做其他的事情,只能为这个传销公司做宣传。万一真有人说,我要解析到我自己单独建设的网站去,当然也可以,等于卖给你一个全世界最贵的域名,你还要不断交钱,他也不亏啊。真正做网站的人,是绝对不会去买一个完全没有使用价值的域名的,所有买这个域名的人,都是用来招揽下层的小老鼠用的。
想对传销者说:收手吧。这个帐怎么算都算不过来的。拿着一个垃圾产品去忽悠人,等于是在用自己的良心换钱,完全不值得的。再说了,真的能挣到钱吗?挣不到的!就算你一年内发展了一万个下线(那是不现实的),一个月的总收入才六十多万,真正分到你手上有多少?一年如果真的能发展一万下线,那你肯定是个绝对的营销高手,做正行完全能比干传销挣的更多,更乾净。
何苦趟这趟浑水呢?
更多网路赚钱骗局:http://american-gdi.tk
Ⅱ 怎么使用gdi+
说在多不如视频教程方便的拉~~~
来菜鸟大道吧,才更新了一个在MFC中使用GDI+的基础教学视频哦~
菜鸟大道是专为新人开设的,希望在这里可以开启你的程序之路!
Ⅲ 如何使用GDI绘制半透明矩形
HDC hBitmapDC = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, rt.Width(), rt.Height());
SelectObject(hBitmapDC,hBitmap);
步骤2)在内存DC中绘图
FillRgn(hBitmapDC, (HRGN)rgn, (HBRUSH)m_pGdiBrush);
Rectangle(hBitmapDC, 0, 0, 100, 100);
步骤3) 半透明混合
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.AlphaFormat = 0;
bf.SourceConstantAlpha = 50;
AlphaBlend(hDC,rt.left,rt.top,rt.Width(),rt.Height(),hBitmapDC,0,0,rt.Width(),rt.Height(),bf);
2、GDI+
步骤1) 创建半透明画刷
m_pBrush = new SolidBrush(Color(128, GetRValue(clrMask), GetGValue(clrMask), GetBValue(clrMask))); // 透明度 128
步骤2)使用画刷绘图
Graphics graphics(hDC);
graphics.FillPolygon(&m_pBrush, pts, 3, FillModeAlternate);
效率: GDI+ GDI。
使用GDI+绘图简单而高效,所以推荐使用GDI+。
3、Direct Draw
此方法比较复杂,没有对Direct Draw有一定的了解,不推荐此方法。
代码比较多,不做列举,需要注意的地方有:
使用Direct Draw时,注意,绘制半透明多边形的时候,因为牵涉到已有的图像数据,所以会对绘图页面原有的图像进行读取操作。如果当前绘制页面开辟在显存中的时候,
对显存的读操作会导致整个渲染流水线的暂停,
从而严重影响程序的效率,此时,绘制半透明多边形就会变得异常的慢。这时候需要将绘制页面从显存中更改至内存中。或者在内存中创建一个过度页面,绘制完成后再往显存页面上贴图。效率会有显着提升,实测:
Ⅳ GDI++的一些使用方法
我用的也是gdi++。。的确跟瑞星和360很对不上路。我建议你在配置中的忽略列表中加入瑞星和360的进程名。
另外。我建议你使用gdi++的氦版。这个版本效果虽然差一点。但兼容性会强很多。
还有,替换宋体的雅黑我建议你使用碧海潮生的1.041版本。这个版本的雅黑字体对一些不配合gdi++的软件比较好。
可以到极限主题去问问。哪里高手多.
http://bbs.themex.net
那可以使用gditray的方式加载gdi++啊。
Ⅳ GDI+多线程安全使用方法
微软已经在MSDN上说明了,不要在多线程里共享GDI或者GDI+对象,线程不可能因为一个GDI对象,而进行必要的同步控制。
Ⅵ 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,调用里面的函数就可以了。
Ⅶ MFC中如何使用GDI+绘制出图形
1、可以在内存中建立一张缓存图片,然后在这个图片上画你需要的图,然后输出到窗体,这样你可以直接保存成图片了。
2、画在bitmap上
bitmap有save方法
创建graphics的时候用:Graphics.FromImage().
Ⅷ 如何使用GDI+绘制图形可按规定路径前进
C# GDI+编程之基础篇
一、关于GDI+
从本质上来看,GDI+为开发者提供了一组实现与各种设备(例如监视器,打印机及其它具有图形化能力但不及涉及这些图形细节的设备)进行交互的库函数。GDI+的本质在于,它能够替代开发人员实现与例如显示器及其它外设的交互;而从开发者角度来看,要实现与这些设备的直接交互却是一项艰巨的任务。
下图1展示了GDI+在开发人员与上述设备之间起着重要的中介作用。其中,GDI+为我们“包办”了几乎一切—从把一个简单的字符串“HelloWorld”打印到控制台到绘制直线,矩形甚至是打印一个完整的表单等。
图1.GDI+担当着重要的中介作用
那么,GDI+是如何工作的呢?为了弄清这个问题,让我们来分析一个示例—绘制一条线段。实质上,一条线段就是一个从一个开始位置(X0,Y0)到一个结束位置(Xn,Yn)的一系列像素点的集合。为了画出这样的一条线段,设备(在本例中指显示器)需要知道相应的设备坐标或物理坐标。
然而,开发人员不是直接告诉该设备,而是调用GDI+的drawLine()方法,然后,由GDI+在内存(即“视频内存”)中绘制一条从点A到点B的直线。GDI+读取点A和点B的位置,然后把它们转换成一个像素序列,并且指令监视器显示该像素序列。简言之,GDI+把设备独立的调用转换成了一个设备可理解的形式;或者实现相反方向的转换。
至此,我们已经简单了解了GDI+的工作机理。现在,让我们开始探讨如何实现一些基本的图像操作。
二、图像操作—缩略图,缩放与保存
在本文示例中,我们将实现如下的任务:
1. 创建缩略图。
2. 缩放一个加载的图像。
3. 保存一个操作中的图像。
a) 创建缩略图
缩略图是图像的浓缩版本。典型情况下,一幅缩略图图像的尺寸为80×200像素。在GDI+中,一个图像的缩略图可以通过使用Image类的GetThumbnailImage()方法来创建。其函数原型如下:
public Image GetThumbnailImage (
int thumbWidth,
int thumbHeight,
GetThumbnailImageAbort callback,
IntPtr callbackData
)
第一个参数相应于缩略图的宽度;第二个参数相应于生成的缩略图的高度;第三个参数是一个Image.GetThumbnailImageAbort委托。在 GDI+ 1.0 版中不使用此委托。即便如此,也必须创建一个委托并在该参数中传递对此委托的引用。第四个参数同样没有使用,但是也需要提供以实现兼容性。注意,第四个参数必须为IntPtr.Zero。
如果前两个参数(也就是宽度和高度)都为0的话,那么,GDI+返回一个嵌入式缩略图。否则,使用系统定义尺寸创建该缩略图。例如,如果img是一个图像类的实例,并且使用的宽度和高度都是系统定义的,创建一个缩略图的语句应该如下所示:
Image thumbNailImage = img.GetThumbnailImage(0,0,tnCallBack,IntPtr.Zero);
在此,thumbNailImage包含返回的缩略图,而tnCallback是一个相应于Image.GetThumbnailImageAbort的函数,其定义如下:
//必须调用它,但是没有使用
style='font-size:10.0pt;font-family:Verdana'>publicbool tnCallbackMethod()
...{
return false;
}
b) 缩放一个加载的图像
缩放是放大或缩小一个图像的过程—通过在图像尺寸上乘以缩放因子实现。其中,缩放因子=期望的图像尺寸/当前图像尺寸。例如,要把一个图像放大200%,则当前尺寸必须乘以200%(200%=200/100=2);为了缩小一个图像到25%,则当前尺寸必须乘以25%或0.25(25/100=0.25倍)。
c) 保存图像
保存操作是图像操作中的关键操作之一。在保存一个图像时,图像相应的类型信息也必须进行保存;也就是说,该图像的扩展名在这一过程中具有重要角色。每一种类型相应于一个特定的格式。实质上,在保存一个图像时,根据该格式输出数据是非常必要的。然而,借助于GDI+ API的优势,一个对Image类的Save()方法的简单调用就可以把相应的写数据操作中所有细节省略掉。这个方法使用两个参数—被保存的图像的名字和待保存图像的格式。该格式能够通过ImageFormat类提供的类型来指定。下列表格指定了GDI+支持的各种图像格式。
属性 描述
Bmp 指定BMP格式。
Emf 指定EMF(增强的元文件格式)。
Exif 指定EXIF格式。
Gif 指定GIF格式。
Guid 指定一个GUID结构,用于描述ImageFormatobject。
Icon 指定Windows图标格式。
Jpeg 指定JPEG格式。
MemoryBmp 指定内存位图格式。
Png 指定PNG格式。
Tiff 指定TIFF格式。
Wmf 指定WMF(Windows元文件格式)。
其中,Emf和Wmf是特定于Windows系统的。
假定你想使用名字“checker.gif”保存一个图像,那么,相应的实现语句将是:
curImage.Save(“checker.gif”,ImageFormat.Gif);
这里,curImage对应于Image类的实例。
在下一节中,我将对前面开发的这个应用程序进行扩展。
三、实际开发中的图像操作
下面,我们来讨论实际中的使用情况。我将在本文示例应用程序中添加下列功能:
1. 以用户指定的格式保存图像。
2. 根据从菜单下选择的百分比放大图像。
3. 创建一个加载图像的略缩图。
相应的菜单操作如下所示:
mnuSave—文件菜单下保存图像的子菜单。
mnu200Zoom—放大图像200%。
mnuThumbNail—创建图像的一个略缩图。
下面是处理菜单项mnuSave的Click事件相应的方法:
private void mnuSave_Click(object sender,System.EventArgs e)
...{
//如果图像已经创建
if(curImage == null)
return;
//调用SaveFileDialog对话框
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.Title = "Save Image As";
saveDlg.OverwritePrompt = true;
saveDlg.CheckPathExists = true;
saveDlg.Filter =
"Bitmap File(*.bmp)|*.bmp|" +
"Gif File(*.gif)|*.gif|" +
"JPEG File(*.jpg)|*.jpg|" +
"PNG File(*.png)|*.png" ;
saveDlg.ShowHelp = true;
//如果选择,则进行保存
if(saveDlg.ShowDialog() == DialogResult.OK)
...{
//得到用户选择的文件名
string fileName = saveDlg.FileName;
//得到文件扩展名
string strFilExtn =fileName.Remove(0,fileName.Length - 3);
//保存文件
switch(strFilExtn)
...{
case "bmp":
curImage.Save(fileName, ImageFormat.Bmp);
break;
case "jpg":
curImage.Save(fileName, ImageFormat.Jpeg);
break;
case "gif":
curImage.Save(fileName, ImageFormat.Gif);
break;
case "tif":
curImage.Save(fileName, ImageFormat.Tiff);
break;
case "png":
curImage.Save(fileName, ImageFormat.Png);
break;
default:
break;
}
}
}
首先,以可接收的扩展名显示这个保存对话框。然后,由从该对话框返回的文件名检索相应的扩展名。最后,根据该扩展名,使用相应的图像格式参数调用Save()方法。
接下来,我们分析菜单项mnu200Zoom相应的处理器。首先,让我们在应用程序级添加下列以粗体显示的一行:
private double curZoom=1.0;
private Image curImage=null;//用于存储当前图像
private int i = 0;//用于把屏幕重画操作与缩略图绘制部分区别开来
然后,必须对mnuLoad处理代码作少许调整,如下所示:
private void mnuLoad_Click(object sender,System.EventArgs e)
...{
//创建OpenFileDialog
OpenFileDialog opnDlg = new OpenFileDialog();
//设置一个图像类型过滤器
opnDlg.Filter =
"All Image files|*.bmp;*.gif;*.jpg;*.ico;"+
"*.emf;,*.wmf|Bitmap Files(*.bmp;*.gif;*.jpg;"+
"*.ico)|*.bmp;*.gif;*.jpg;*.ico|"+
"Meta Files(*.emf;*.wmf;*.png)|*.emf;*.wmf;*.png";
opnDlg.Title = "打开图像文件";
opnDlg.ShowHelp = true;
//如果OK,选择它
if(opnDlg.ShowDialog() == DialogResult.OK)
...{
//读取当前选择的文件名
curFileName = opnDlg.FileName;
//使用Image.FromFile创建图像对象
try
...{
curImage = Image.FromFile(curFileName);
}
catch(Exception exp)
...{
MessageBox.Show(exp.Message);
}
}
//改变AutoScrollMinSize属性
this.AutoScrollMinSize = new Size
((int)(curImage.Width * curZoom),
(int)(curImage.Height * curZoom));
i++;
//重新绘制表单
Invalidate();
}
注意,在此新添加的代码分别在原来的图像宽度和高度上乘以放大因子以生成一个放大的图像。然后,必须相应地修改paint事件的处理器。如下所示:
private void Form1_Paint(object sender, PaintEventArgs e)
...{
if (curImage != null && i==0)
...{
Graphics g = this.CreateGraphics();
g.DrawImage(curImage, new Rectangle
(AutoScrollPosition.X,
AutoScrollPosition.Y ,
(int)(this.ClientRectangle.Width * curZoom),
(int)(ClientRectangle.Height * curZoom)));
}
}
该图像应该有根据放大因子的相应的高度和宽度。下面,我们来看一下mnu200Zoom菜单项相应的事件处理器:
private void mnu200_Click(object sender,System.EventArgs e)
...{
if(curImage != null)
...{
curZoom = (double)200/100;
i++;
Invalidate();
}
}
最后,我们来看一下mnuThumbNail菜单项相应的事件处理器:
1private void mnuThumbnail_Click(object sender, EventArgs e)
2...{
3if(curImage != null)
4...{
5i++;
6//回调
7Image.GetThumbnailImageAbort tnCallBack =
8new Image.GetThumbnailImageAbort(tnCallbackMethod);
9//得到缩略图图像
10Image thumbNailImage = curImage.GetThumbnailImage
11(100, 100, tnCallBack, IntPtr.Zero);
12//创建一个Graphics对象
13Graphics tmpg = this.CreateGraphics();
14tmpg.Clear(this.BackColor);
15//画缩略图图像
16tmpg.DrawImage(thumbNailImage, 10, 10, thumbNailImage.Width, thumbNailImage.Height);
17//释放掉Graphics对象
18tmpg.Dispose();
19}
20
21}
22
在此,我们首先创建一个GetThumbnailImageAbort类型的变量并且赋给它值tnCallbackMethod()—这是通过传递给该方法GetThumbnailImageAbort实现的。然后,它创建一个新的Image类的实例以存储GetThumbnailImage方法返回的图像—此后,这个方法将用于把缩略图绘制到屏幕上。
四、小结
在本文中,我仅讨论了.NET C#环境下关于GDI+编程的一些基本的实用操作片断。在以后的文章中,我们将逐渐展开对.NET GDI+编程高级特征的探讨。
Ⅸ 请教该怎么使用GDI+控件
创建自定义控件的3种主要实现方式:
1)继承已有的控件来实现自定义控件: 主要是当要实现的控件和已有的控件在很多方面比较类似, 通过对已有控件的扩展来满足要求。
2)通过继承一个布局文件实现自定义控件,一般来说做组合控件时可以通过这个方式来实现。
注意此时不用onDraw方法,在构造广告中通过inflater加载自定义控件的布局文件,再addView(view),自定义控件的图形界面就加载进来了。
3)通过继承view类来实现自定义控件,使用GDI绘制出组件界面,一般无法通过上述两种方式来实现时用该方式。