none
如何使用Image控件显示一个bitmap类型的图片呢? RRS feed

  • 问题

  • 我已经得到了这样的一个数据:
    Bitmap bmap = new Bitmap(ms)

    然后我想在页面中用一个image把它显示出来。通常我们使用imageurl属性。但是这个属性是个string类型的地址。所以不能达到我要的效果。我该怎么做呢?
    郭鹏
    2009年8月1日 15:28

答案

  • 另一个页再读取数据库一次不就行了? 用个id传过去


    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年8月2日 5:03
  • 是这样的。我将一张图片存入了数据库。image类型。是二进制流嘛。然后我要把这张图片读出来的时候就是二进制流,我需要用个Image控件来显示这张图片。如果使用ImageUrl指向另外一个aspx页面。这样我需要先使用session之类的东西来保存这个二进制流。在另一个aspx页面来使用。好像这样很麻烦。有没有一种方法,在我获取到这张图片的时候直接显示在页面上?


    郭鹏

    您好,就用ImageUrl指向的页面(假设为showimg.aspx)来获取二进制流并输出为图片即可。
             可以通过传递图片编号给这个showimg.aspx页面。例如:showimg.aspx?imgID=1001
    2009年8月2日 12:07
    版主

全部回复

  • 不需要载入数据到Bitmap,除非你要修改图像
    url指向你创建的一个aspx
    这个aspx需要输出二进制数据,content type需要为图像类型。

    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2009年8月1日 16:36
    版主
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.IO;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Drawing.Drawing2D;
    
    public partial class CheckCode : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            CreateCheckCodeImage(GenerateCheckCode());
        }
    
        private string GenerateCheckCode()
        {
            char code;
            int number;
            string checkCode = String.Empty;
    
            Random random = new Random();
    
            for (int i = 0; i < 4; i++)
            {
                number = random.Next();
    
                if (number % 2 == 0)
                    code = (char)('0' + (char)(number % 10));
                else
                    code = (char)('A' + (char)(number % 26));
    
                checkCode += code;
            }
    
            Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
    
            return checkCode;
        }
    
        private void CreateCheckCodeImage(string checkCode)
        {
            if (checkCode == null || checkCode.Trim() == String.Empty)
                return;
    
            Bitmap image = new Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
            Graphics graphics = Graphics.FromImage(image);
    
            try
            {
                //生成随机生成器
                Random random = new Random();
    
                //清空图片背景色
                graphics.Clear(Color.White);
    
                //画图片的背景噪音线
                for (int i = 0; i < 25; i++)
                {
                    int x1 = random.Next(image.Width);
                    int x2 = random.Next(image.Width);
                    int y1 = random.Next(image.Height);
                    int y2 = random.Next(image.Height);
    
                    graphics.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
                }
    
                Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
                graphics.DrawString(checkCode, font, brush, 2, 2);
    
                //画图片的前景噪音点
                for (int i = 0; i < 100; i++)
                {
                    int x = random.Next(image.Width);
                    int y = random.Next(image.Height);
    
                    image.SetPixel(x, y, Color.FromArgb(random.Next()));
                }
    
                //画图片的边框线
                graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
    
                MemoryStream ms = new MemoryStream();
                image.Save(ms, ImageFormat.Gif);
    
                Response.ClearContent();
                Response.ContentType = "image/gif";
                Response.BinaryWrite(ms.ToArray());
    
            }
            finally
            {
                graphics.Dispose();
                image.Dispose();
            }
        }
    }
    最后,另外一个页面:

        <asp:Image ID="Image1" runat="server" ImageUrl="CheckCode.aspx" />

    jon.valett@gmail.com
    2009年8月1日 19:10
    版主
  • 是这样的。我将一张图片存入了数据库。image类型。是二进制流嘛。然后我要把这张图片读出来的时候就是二进制流,我需要用个Image控件来显示这张图片。如果使用ImageUrl指向另外一个aspx页面。这样我需要先使用session之类的东西来保存这个二进制流。在另一个aspx页面来使用。好像这样很麻烦。有没有一种方法,在我获取到这张图片的时候直接显示在页面上?


    郭鹏
    2009年8月2日 4:40
  • 另一个页再读取数据库一次不就行了? 用个id传过去


    如果您觉得对您有帮助,请在“是否有帮助”点“是”;如果你觉得回复很满意,请“标记为已解答”
    2009年8月2日 5:03
  • 是这样的。我将一张图片存入了数据库。image类型。是二进制流嘛。然后我要把这张图片读出来的时候就是二进制流,我需要用个Image控件来显示这张图片。如果使用ImageUrl指向另外一个aspx页面。这样我需要先使用session之类的东西来保存这个二进制流。在另一个aspx页面来使用。好像这样很麻烦。有没有一种方法,在我获取到这张图片的时候直接显示在页面上?


    郭鹏

    您好,就用ImageUrl指向的页面(假设为showimg.aspx)来获取二进制流并输出为图片即可。
             可以通过传递图片编号给这个showimg.aspx页面。例如:showimg.aspx?imgID=1001
    2009年8月2日 12:07
    版主