zoukankan      html  css  js  c++  java
  • 在ASP.NET内处理图像

    一、自动生成图像并放入自己的页面中

    ①建立页面genpicutre.aspx,并在此页面中:

    首先要创建一Bitmap实例,

    然后以此来构建一个Graphics实例,Graphics实例提供了各种绘制方法,这样才能按照数据的要求在Bitmap实例上绘制各种图形。

    最后通过Bitmap类的Save方法就可以显示已经创建的位图对象。

    ②在自己的页面中使用图像控件,并将其ImageUrl属性设为genpicture.aspx

    例:根据现有图片动态生成加入文字的图片

                Bitmap bp=new Bitmap(@"d:\inetpub\wwwroot\graphics\p02.jpg");

                Graphics g=Graphics.FromImage(bp);

                g.DrawString("图片来自天源网",new Font("宋体",20),Brushes.Red ,5,bp.Height-40);

                bp.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Gif );

                g.Dispose();

                          bp.Dispose();

    自动生成有渐变背景和文字的图

        Response.Clear();

                            Bitmap bm=new Bitmap(320,30,System.Drawing.Imaging.PixelFormat.Format24bppRgb);

                            Graphics g=Graphics.FromImage(bm);

                           

                            g.Clear(Color.Green);

                            g.DrawString("你看见了吗?我没骗你吧?",new Font("宋体",16,FontStyle.Bold),new SolidBrush(Color.White),new PointF(2,4));

                            g.FillRectangle(new LinearGradientBrush(new Point(0,0),new Point(320,30),Color.FromArgb(0,0,0,0),Color.FromArgb(255,255,255,255)),0,0,320,30);

                            bm.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);

                            g.Dispose();

                            bm.Dispose();

                                                    Response.End();

    几点要注意的:

    StringFormat sf=new StringFormat(StringFormatFlags.DirectionVertical);可设为竖排文本

    在使用文字时应使文字的长度小于图片的宽度,可使用这个语句:

    对于要导入GIF图片必须用以下步骤:


    System.Drawing.Image g=System.Drawing.Image.FromFile(@"d:\inetpub\wwwroot\graphics\02.gif");

    System.Drawing.Imaging.ImageFormat f=g.RawFormat;

    Bitmap b=new Bitmap(g);

    Graphics gh=Graphics.FromImage(b);

    gh.DrawRectangle(Pens.Red,0,0,50,50);

    b.Save(Response.OutputStream,f);                        

    gh.Dispose();

    b.Dispose();

    g.Dispose();

    二、如何生成透明的图片(见:http://www.cnblogs.com/ahuang1118/archive/2005/05/27/163623.html)

    三、如何根据数据库中的数据生成动态的图片

    string sRouter = "c:db.mdb" ;
    //获得当前Access数据库在服务器端的绝对路径
    string strCon = " Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + sRouter ;
    //创建一个数据库连接
    OleDbConnection myConn = new OleDbConnection ( strCon ) ;
    string strCom = " SELECT YF ,SL FROM Table01 ORDER BY YF" ;
    myConn.Open ( ) ;
    OleDbCommand myCommand = new OleDbCommand ( strCom , myConn ) ;
    OleDbDataReader myOleDbDataReader = myCommand.ExecuteReader ( ) ;
    //创建OleDbDataReader实例,并以此实例来获取数据库中各条记录数据
    int [ ] iXiaoSH = new int [ 12 ] ;
    //定义一个数组,用以存放从数据库中读取的销售数据
    string [ ] sMoth = new string [ 12 ] ;
    //定义一个数组,用以存放从数据库中读取的销售月份
    int iIndex = 0 ;
    while ( myOleDbDataReader.Read ( ) )
    {
    iXiaoSH [ iIndex ] = myOleDbDataReader.GetInt32 ( 1 ) ;
    sMoth [ iIndex ] = myOleDbDataReader.GetInt32 ( 0 ) . ToString ( ) + "月" ;
    iIndex++ ;
    }
    //读取Table01数据表中的各条数据,并存放在先前定义的二个数组中
    myConn . Close ( ) ;
    myOleDbDataReader . Close ( ) ;
    //关闭各种资源
    Bitmap bm = new Bitmap ( 600 , 250 ) ;
    //创建一个长度为600,宽带为250的Bitmap实例
    Graphics g ;
    g = Graphics.FromImage ( bm ) ;
    //由此Bitmap实例创建Graphic实例
    g . Clear ( Color . Snow ) ;
    //用Snow色彩为背景色填充此绘画图面
    g . DrawString ( " ××公司××器件2002年度销售情况一览表" , new Font ( "宋体" , 16 ) , Brushes . Black , new Point ( 5 , 5 ) ) ;
    //在绘画图面的指定位置,以指定的字体、指定的颜色绘制指定的字符串。即为图表标题
    //以下代码是是实现图01中的右上部
    Point myRec = new Point ( 535 , 30 ) ;
    Point myDec = new Point ( 560 , 26 ) ;
    //以上是在图01中为下面绘制定位
    g . DrawString ( "单位:万套" , new Font ( "宋体" , 9 ) , Brushes . Black , new Point ( 525 , 12 ) ) ;
    for ( int i = 0 ; i < sMoth.Length ; i++ )
    {
    g . DrawRectangle ( Pens.Black , myRec . X , myRec . Y , 20 , 10 ) ;
    //绘制小方块
    g . FillRectangle ( new SolidBrush ( GetColor ( i ) ) , myRec . X , myRec . Y , 20 , 10 ) ;
    //填充小方块
    g . DrawString ( sMoth [ i ] . ToString ( ) , new Font ( "宋体" , 9 ) , Brushes . Black , myDec ) ;
    //绘制小方块右边的文字
    myRec . Y += 15 ;
    myDec . Y += 15 ;
    }
    //以下代码是绘制图01中的Bar图,及其销售数量
    int iBarWidth = 40 ;
    int scale = 10 ;
    for ( int i = 0 ; i < iXiaoSH . Length ; i++ )
    {
    g . DrawRectangle ( Pens.Black , ( i * iBarWidth ) + 15 , 250 - ( iXiaoSH [ i ] * scale ) , 20 , ( iXiaoSH [ i ] * scale ) + 5 ) ;
    //绘制Bar图
    g . FillRectangle ( new SolidBrush ( GetColor ( i ) ) , ( i * iBarWidth ) + 15 , 250 - ( iXiaoSH [ i ] * scale ) , 20 , ( iXiaoSH [ i ] * scale ) + 5 ) ;
    //以指定的色彩填充Bar图
    g . DrawString ( iXiaoSH [ i ] . ToString ( ) , new Font ( "宋体" , 9 ) , Brushes . Black , ( i * iBarWidth ) + 20 , 235 - ( iXiaoSH [ i ] * scale ) ) ;
    //显示Bar图代表的数据
    }
    //以下代码是绘制图01中的边框,并形成Jpeg文件,供浏览器显示出来
    Pen p = new Pen ( Color.Black , 2 ) ;
    g . DrawRectangle ( p , 1 , 1 , 598 , 248 ) ;
    bm.Save ( Response . OutputStream , ImageFormat . Jpeg ) ;

     

  • 相关阅读:
    Python全栈_Day3_网络基础
    Python全栈_Day2_操作系统基础
    Python全栈_Day1_计算机硬件
    NX二次开发-以指定字符分割字符串
    NX二次开发-获取当前项目路径
    NX二次开发-根据文件名删除文件
    NX二次开发-写入信息窗口
    NX二次开发-读文件
    NX二次开发-获取NX里的对象信息
    NX二次开发-菜单
  • 原文地址:https://www.cnblogs.com/ahuang1118/p/172545.html
Copyright © 2011-2022 走看看