首页 新闻 赞助 找找看

C# GDI+ 问题

0
悬赏园豆:100 [已解决问题] 解决于 2013-11-11 18:47

代码如下:

//创建一个图片对象用来装载要被添加水印的图片 Image imgPhoto = Image.FromFile("H:\\SourceImage.png");

//获取源图片的宽和高 int SourceImageWidth = imgPhoto.Width; int SourceImageHeight = imgPhoto.Height;            //建立一个Bitmap图片,大小和源图片保持一致 Bitmap bmPhoto = new Bitmap(SourceImageWidth, SourceImageHeight, PixelFormat.Format24bppRgb); //设置Bitmap的分辨率=源图片分辨率 bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);

//封装一个GDI+ 绘图图面 Graphics grPhoto = Graphics.FromImage(bmPhoto);

问题:从上面的代码中创建的imgPhoto、bmPhoto和grPhoto 是什么关系,他们之间的内存是如何关联的?

蓝色狙击手的主页 蓝色狙击手 | 初学一级 | 园豆:9
提问于:2013-11-08 17:33
< >
分享
最佳答案
0

imgPhoto用于连接外部的一张图片,也就是将硬盘中的图片读入内存中,grPhoto相当于一个画笔,bmPhoto相当于一块画板与原来连接的图片大小而像素格式一样,那么要画水印的时候就可以先用grPhoto将外部的图片画到bmPhoto中在用grPhoto在bmPhoto中你指定的位置画上水印,那么bmPhoto上面的图案就是你所要的最终图案,最后只要将bmPhoto中的图案保存到硬盘就可以了

收获园豆:50
Mushroom0417 | 菜鸟二级 |园豆:327 | 2013-11-10 22:21
其他回答(3)
0
//创建一个图片对象用来装载要被添加水印的图片
 Image imgPhoto = Image.FromFile("H:\\SourceImage.png");
//获取源图片的宽和高
int SourceImageWidth = imgPhoto.Width; 
int SourceImageHeight = imgPhoto.Height;            
//建立一个Bitmap图片,大小和源图片保持一致 
Bitmap bmPhoto = new Bitmap(SourceImageWidth, SourceImageHeight, PixelFormat.Format24bppRgb); 
//设置Bitmap的分辨率=源图片分辨率 
bmPhoto.SetResolution(imgPhoto.HorizontalResolution, mgPhoto.VerticalResolution);
//封装一个GDI+ 绘图图面 Graphics grPhoto = Graphics.FromImage(bmPhoto);
收获园豆:10
会长 | 园豆:12401 (专家六级) | 2013-11-08 17:39

grPhoto 和 bmPhoto有关系,grPhoto在bmPhoto上面绘制

imgPhoto和其他的两个没什么关系,就是去了其大小,用了创建一个和他一样大小的bmPhoto

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2013-11-08 17:42
0

 // 摘要:
    //     封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成。System.Drawing.Bitmap 是用于处理由像素数据定义的图像的对象。

Bitmap : Image

// 摘要:
    //     为源自 System.Drawing.Bitmap 和 System.Drawing.Imaging.Metafile 的类提供功能的抽象基类。

Image : MarshalByRefObject, ISerializable, ICloneable, IDisposable

 // 摘要:
    //     封装一个 GDI+ 绘图图面。无法继承此类。

Graphics : MarshalByRefObject, IDeviceContext, IDisposable

Graphics把图像展示到画布上,Image只是将图像读到内存中(不展示),Bitmap将读到的图像转化成位图内容(不展示)。Bitmap内部使用了GDI+对图片内容进行了转换。

再保存图片的时候,Bitmap(不是位图则要转换)和Image直接输出内寸。Graphics生成新的内存输出。

收获园豆:20
贪心狸猫 | 园豆:872 (小虾三级) | 2013-11-08 22:54
0

imgPhoto 是磁盘中的图片文件。

bmPhoto 是在内存中新建的一个图像对象,建的时候是按照 imgPhoto 的大小和分辨率。

grPhoto 是画图对象。也可以这么认为 grPhoto 的画图板的背景是 bmPhoto。

在内存中 imgPhoto 和 bmPhoto、grPhoto 没有关系,操作 grPhoto 直接受影响的是 bmPhoto。

收获园豆:20
guwoow | 园豆:611 (小虾三级) | 2013-11-11 15:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册