ASP.NET开发经验(2) — ASP.NET中的一些图形处理

如果大家用过 SharePoint Portal Server 2001,一定会记得增加型文件夹中的一些很不错的特性,如文档检出/检入、发布、审批流程等,其中最吸引我的就是它通过在文档的图标上加一个特别的标记,来表示文档的状态,如下图所示:

自己在做文档管理系统时,也借鉴了这种做法,其实和给图片加水印的作法类似,主要代码如下:

function codedisplay()
{
if(document.all(“code”).style.display == “none”)
{
document.all(“code”).style.display = “”;
document.all(“codeop”).innerText = “Hide Code>>”;
}
else
{
document.all(“code”).style.display = “none”;
document.all(“codeop”).innerText = “Show Code>>”;
}

}

Show Code>>

//取源图像
Image imgPhoto = Image.FromFile(sSourceFile);
Bitmap bmPhoto = new Bitmap(imgPhoto.Width, imgPhoto.Height, PixelFormat.Format24bppRgb);
bmPhoto.MakeTransparent();
//设置绘图面属性,呈现质量等   
Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.SmoothingMode = SmoothingMode.AntiAlias;
grPhoto.DrawImage( imgPhoto, new Rectangle(0, 0, imgPhoto.Width, imgPhoto.Height), 0, 0, imgPhoto.Width, mgPhoto.Height, GraphicsUnit.Pixel);

//打开要附加的水印图片
Image imgWatermark = new Bitmap(sWatermarkFile);
Bitmap bmWatermark = new Bitmap(bmPhoto);
bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
Graphics grWatermark = Graphics.FromImage(bmWatermark);

int xPosOfWm = imgPhoto.Width – imgWatermark.Width;
int yPosOfWm = imgPhoto.Height – imgWatermark.Height;

//画
grWatermark.DrawImage(imgWatermark,
   new Rectangle(xPosOfWm,yPosOfWm,imgWatermark.Width,imgWatermark.Height),
   0,                 
   0,                  
   imgWatermark.Width,           
   imgWatermark.Height,     
   GraphicsUnit.Pixel);

//保存最终图片
imgPhoto = bmWatermark;
imgPhoto.Save(sIconFileName,ImageFormat.Png);

如果文档有审阅流程,那文档的流转图就非常受欢迎了,这样用户可以方便地查看文档正处于那个阶段。
其实与工作流有关软件可能都有这样要求,我目前没有找到更好的办法,利用 <table> ,将各个阶段
用线条和图形表示出来,办法虽有点笨,但好象显示效果还不错。

曾经试过 VML ,发现要动态地画这种图,就得很精确地控制屏幕上位置,比较麻烦,后来放弃了这种作法。

还曾经想用 Visio Automation 来试一下,发现 Visio 的对象模型和 VBA 比 Word 和 Excel 的难多了,工作量更大。

“ASP.NET开发经验(2) — ASP.NET中的一些图形处理”的35个回复

  1. 谢谢夸奖 🙂

    我觉得在 blog 上其实也是可以问题的,但一定要有技巧,即首先要有你自己的观点,那怕不成熟。

    等着大家给我的“经验”提意见,共同交流,共同提高。

  2. SVG 其实和 VML 差不多,我的意见 🙂

    而且需要浏览器安装其它插件(如 Acrobat SVG Viewer 等)支持,而 VML 是 IE 不用安装东西就可以支持的。

  3. 确实,现在已经很少有人再关注 VML 了,MSDN 中关于 VML 的资料都是两三年前的,一点儿都没有更新 。

    不过,现在流行起来的一些 XUI 对 SVG 的影响也是很大的,将来还很难说 😛

  4. 我在我做的Workflow里曾经考虑过用SVG 来显示文档的流转状态,因为我们自己作了一个流程设计工具,各个状态的位置坐标我都有记录,而且我的流程定义是Xml格式的文本,理论上说。我只需要Xslt就可以把它转换成SVG。

    不过后来还没有开始作这个,就离开了

  5. 两个问题:
    下面那个流程图的箭头和线条都是已有图片?
    也就是那个图是完全的HTML的了吗?
    Thanks.

  6. To: mmkk

    是已有图片,本来是用 VML 画的,发现还不如用已有图片。

    图是完全的 HTML ,是一个 <table> ,便于居中,对齐, VML 就不容易做 🙂

  7. 看了之后,脑子里蹦出一个问题,生成临时文件而又不删除会不会增加了人工维护(磁盘空间和权限等)的成本呢?

    提出另外一个思路,使用response,直接将生成的图片“写”到<img>中,基本上在打开html后看到的应该是^DLKJHFDLSJA7之类的编码。

    这个方法在asp时代就已经有很好的案例,asp.net使用gdi+和response对象(或者相关对象),应该能更好的实现。

    这种方法还可以用来在报表中生成实时的生成饼图。

    没有试过这种方法,但肯定是可行的。

  8. 我正在开发这样的文档管理系统
    能不能提供一个版本的系统源码给与参考啊?

    带流程图和图片处理的程序~~
    偶得信箱:[email protected]
    多谢支持阿

  9. 不知道这跟贴能不能被看见 ^_^。

    就是有关WEB页的精确打印问题,既是用IE打印从服务器读来的数据,而且要对应到外部单据上。

    请教:
    用楼主方法能行吧:我把单据扫描成底图,再把数据一点点印上去,在服务器端生成图像,response到IE,然后IE打印那张图像。

    可行否?

    多谢!^_^

  10. 我都不知你们在上面说些什么
    有什么好的方法能拿出来处理上面的问题才是最好的
    讲那么多没有一句切入正题

  11. 编译器错误信息: CS0117: “System.Web.UI.WebControls.Label”并不包含对“text”的定义

    源错误:

    行 6: void page_load()
    行 7: {
    行 8: text1.text="hello world!";
    行 9: }
    行 10: </script>

    源文件: C:Documents and SettingsAdministratorMy DocumentsVisual Studio ProjectsHTMLPage1.aspx 行: 8

    显示详细的编译器输出:

    C:WINNTsystem32> "c:winntmicrosoft.netframeworkv1.1.4322csc.exe" /t:library /utf8output /R:"c:winntassemblygacsystem.enterpriseservices1.0.5000.0__b03f5f7f11d50a3asystem.enterpriseservices.dll" /R:"c:winntassemblygacsystem.data1.0.5000.0__b77a5c561934e089system.data.dll" /R:"c:winntassemblygacsystem.drawing1.0.5000.0__b03f5f7f11d50a3asystem.drawing.dll" /R:"c:winntassemblygacsystem.web.mobile1.0.5000.0__b03f5f7f11d50a3asystem.web.mobile.dll" /R:"c:winntassemblygacsystem.xml1.0.5000.0__b77a5c561934e089system.xml.dll" /R:"c:winntassemblygacsystem.web.services1.0.5000.0__b03f5f7f11d50a3asystem.web.services.dll" /R:"c:winntassemblygacsystem1.0.5000.0__b77a5c561934e089system.dll" /R:"c:winntassemblygacsystem.web1.0.5000.0__b03f5f7f11d50a3asystem.web.dll" /R:"c:winntmicrosoft.netframeworkv1.1.4322mscorlib.dll" /out:"C:WINNTMicrosoft.NETFrameworkv1.1.4322Temporary ASP.NET Filesroot31059c34aa7ea0b0qlzoges8.dll" /debug- /optimize+ /warnaserror /w:1 "C:WINNTMicrosoft.NETFrameworkv1.1.4322Temporary ASP.NET Filesroot31059c34aa7ea0b0qlzoges8.0.cs"

    Microsoft (R) Visual C# .NET 编译器版本 7.10.3052.4
    用于 Microsoft (R) .NET Framework 版本 1.1.4322
    版权所有 (C) Microsoft Corporation 2001-2002。保留所有权利。

    C:Documents and SettingsAdministratorMy DocumentsVisual Studio ProjectsHTMLPage1.aspx(8,9): error CS0117: “System.Web.UI.WebControls.Label”并不包含对“text”的定义

    显示完整的编译源:

  12. TO moslem: 能把你QQ告诉我吗?我的是 312781,看了你的随笔后我有些不明白的地方..希望能得到你的指点

  13. 我的web图形设计是使用svg来实现的,我也用VML做过,效果甚至比svg还好,但是文字处理的效果不好

  14. 我们用.NET智能客户端技术与webservice技术实现,效果更好。 欢迎大家看看我们的工作流平台展示。

    公司网站下载地址:
    http://www.linjon.cn 在首页左边导航栏的软件下载进入。
    FTP下载地址:
    ftp://210.41.107.38 用户名与密码都是openlabftp 在linjon目录下有我公司产品资料。
    邮箱下载地址:
    [email protected] ,密码:JLKEngine

    联系方式:028-85470042 ,1 3982071140
    QQ:2 6326507
    MSN:JLK [email protected]
    E-Mail:[email protected]

评论已关闭。