仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1059|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET编程:.Net中图片的疾速处置

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:24:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
完全不一样的。.net其实我也说不太清,.net可以把他理解为跟J2EE相对的工具。c++主要做系统相关的开发你要学.net的话就应该学C#。(其实微软在.NET平台上也考虑了给C++留一个地位。在图片处置过程当中,我们常常必要对图片逐像素举行处置,好比为了使图片某一直量的色彩加深大概减淡,大概为了使图象变更成口角色彩,这个时分我们必要掏出每一个点上的像素举行盘算,再赋值到图象指定的地位。在.Net中,官方供应了Image.GetPixel(intx,inty)的办法供开辟职员猎取指定地位的像素,同时供应了Image.SetPixel(intx,inty,Colorcolor)的办法来给指定地位的像素赋值。可是这个办法功能很差,假定存在一张1024*768的图片,逐像素操纵并予以缓存的话亦最少必要1027*768次GetPixel和SetPixel,处置速率将慢到没法忍耐。因而本计划将利用对内存间接读取和赋值的体例来进步图片处置的速率。
这里起首要先容一个类System.Drawing.Imaging.BitmapData,间接实例化这个类没有效处,我们必要将一个Bitmap锁定到内存中,来猎取一个BitmapData的实例。办法以下:
利用Bitmap.LockBits(Rectanglerect,ImageLockModeflags,PixelFormatformat)大概它的另外一个重载Bitmap.LockBits(Rectanglerect,ImageLockModeflags,PixelFormatformat,BitmapDatabitmapData)来将图象数据锁定到内存中,以此来猎取一个与指定图片相干联的BitmapData实例。
在BitmapData中有一个主要的属性Scan0,它是一个指针,指向了图片数据地点内存的第一个地位。利用内存跟踪,将Scan0的值填上天址中,能够看到内存的分派情形(Format32bppArgb色彩深度):



这些值与图片像素的对应干系是如许的:



如今我们可使用System.Runtime.InteropServices.Marshal.WriteByte(IntPtrptr,byteval)的办法来变动指定地位的像素值了,修正后只需再挪用一次Bitmap.UnlockBits(BitmapDatabitmapdata)来解锁内存就能够了,比方:
以下为援用的内容:
privatevoidLockUnlockBitsExample(PaintEventArgse)
{
Bitmapbmp=newBitmap("c:fakePhoto.jpg");
Rectanglerect=newRectangle(0,0,bmp.Width,bmp.Height);
System.Drawing.Imaging.BitmapDatabmpData=
bmp.LockBits(rect,System.Drawing.Imaging.ImageLockMode.ReadWrite,
bmp.PixelFormat);
IntPtrptr=bmpData.Scan0;
intbytes=bmp.Width*bmp.Height*3;
byte[]rgbValues=newbyte[bytes];
for(intcounter=0;counter<rgbValues.Length;counter+=3)
{
Marshal.WriteByte(ptr,counter,255);
}
bmp.UnlockBits(bmpData);
e.Graphics.DrawImage(bmp,0,0);
}
此示例将图片上一切像素的Red向量设置为255。运转此实例能够看到图片变色了。
每次挪用System.Runtime.InteropServices.Marshal.WriteByte(IntPtrptr,byteval)的办法其实不便利,因而我们机关一个ColorBgra类用来贮存这4个色彩向量,它的次要代码是如许的(参考自Paint.Net供应的源码):
以下为援用的内容:
[StructLayout(LayoutKind.Explicit)]
publicstructColorBgra
{
[FieldOffset(0)]
publicbyteB;

[FieldOffset(1)]
publicbyteG;

[FieldOffset(2)]
publicbyteR;

[FieldOffset(3)]
publicbyteA;

///<summary>
///LetsyouchangeB,G,R,andAatthesametime.
///</summary>
[FieldOffset(0)]
publicuintBgra;
publicoverridestringToString()
{
return"B:"+B+",G:"+G+",R:"+R+",A:"+A;
}
}
利用这个类在声明为unsafe的高低文中就能够经由过程盘算偏移量的举措寻址找到指定地位像素的地点(指针),比方在Format32bppArgb色彩深度的图片中能够如许盘算:
以下为援用的内容:
publicunsafeColorBgra*GetPointAddress(intx,inty)
{
returny*4+x;
}
将盘算前往的指针赋给ColorBgra*。以后利用以下办法:
以下为援用的内容:
color->B=i;
color->G=i;
color->R=i;
color->A=i;
间接把值写进内存中,完成对图片像素的疾速操纵。
我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。
小女巫 该用户已被删除
沙发
发表于 2015-1-17 07:47:55 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-20 15:49:44 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
地板
发表于 2015-1-29 12:39:11 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
山那边是海 该用户已被删除
5#
发表于 2015-2-6 00:55:36 | 只看该作者
ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
深爱那片海 该用户已被删除
6#
发表于 2015-2-14 18:03:48 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
冷月葬花魂 该用户已被删除
7#
发表于 2015-3-4 09:39:52 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
乐观 该用户已被删除
8#
 楼主| 发表于 2015-3-11 18:10:45 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
若天明 该用户已被删除
9#
发表于 2015-3-19 06:24:32 | 只看该作者
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
再见西城 该用户已被删除
10#
发表于 2015-3-27 09:33:01 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-4 18:39

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表