在ASP.NET中将上传的文件转换为位图图像

5
我有一个“文件上传”框和“按钮”。在我的场景中,要上传的文件是图像文件。我想把这些图像文件转换成位图,并在缓冲区中临时存储它们。
我有一个函数,它需要两个位图输入并告诉我们这两个文件是否匹配。
一个文件将来自于“ButtonClick”事件上的“FileUpload”控件,而另一个位图将从数据库中读取。
请问如何将这些文件转换为位图并将两个位图对象传递给该函数?

我还没有尝试过任何东西。从零开始。我的想法就是上面提到的,但是我无法弄清楚该如何做。你能否提供一个通用代码来完成任务,或者提供任何方向都可以。 - Piyush
1个回答

9
您可以按照以下方式获取上传图像的位图:
System.Drawing.Bitmap bmpPostedImage = new System.Drawing.Bitmap(userFileUpload.PostedFile.InputStream);

然后您会得到存储的副本(希望它以字节数组的形式存储,并且您有一个ID来获取它),然后按照以下方式将其转换为位图

byte[] byteArrayStoredImage = ImageService.GetImageData(imageID);
MemoryStream imgStream = new MemoryStream(byteArrayStoredImage);
System.Drawing.Bitmap bmpStoredImage = new Bitmap(imgStream);

有了两个位图(bmpPostedImage和bmpStoredImage),您可以调用函数进行比较。首先,您可以尝试从http://www.dreamincode.net/code/snippet2859.htm中使用此函数,并查看它的效果。可能有更有效的函数来进行比较,尝试使用Google搜索会是一个好主意。
编辑:
以下是从数据库检索图像的代码,假设我在下面的评论中提到:
    public byte[] GetImageData(string imageID)
    {
                string connectionString = ConfigurationManager.ConnectionStrings["connectionstringname"];
        SqlConnection connection = SqlConnection(connectionString);
        connection.Open();
        SqlCommand command1 = new SqlCommand("select imgfile from myimages where imgname=@imageId", connection);
        SqlParameter myparam = command1.Parameters.Add("@imageId", SqlDbType.NVarChar, 30);
        myparam.Value = imageID;
        byte[] img = (byte[])command1.ExecuteScalar();
        connection.Close();
        return img;
    }

然后将 ImageService.GetImageData(imageID) 改为 GetImageData(imageID);

同时需要注意的是,此处未涉及错误处理,因此您可能需要考虑在最终代码中加入相关处理。


ImageService.GetImageData()不存在。我该怎么办?我已经将图像存储在数据库中的“image”数据类型中。 - Piyush
@Piyush:当然,ImageService.GetImageData(imageID)将不得不被你自己的代码所替代,该代码用于连接到你的数据库以检索图像,但需要返回图像数据的字节数组。 - Gboyega Sulaiman
你能帮我检索数据库中存储为“image”数据类型的图像并将其转换为“byte[]”数组吗? - Piyush
@Piyush:我想你应该熟悉ADO.NET,并且正在使用SQL Server。这里的示例代码(http://www.beansoftware.com/ASP.NET-Tutorials/Save-Read-Image-Database.aspx)将为你提供正确方向。不过,我会编辑我的回答,提供更简洁明了的实现方式。 - Gboyega Sulaiman
我正在使用以下代码 var image = (from c in db.Citizen_tables select c.FingerPrint).ToList(); 来获取所有指纹图像,现在通过结果集进行查询,并通过以下代码将每个元素转换为 byte[]byte[] arr = image.ElementAt(i).ToArray(); 其中 i 是一个循环变量。 - Piyush
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接