相关疑难解决方法(0)

在C#中使用Bitmap对象查找图像格式

我正在加载图像文件硬盘驱动器的二进制字节并将其加载到Bitmap对象中.如何从Bitmap对象中找到图像类型[JPEG,PNG,BMP等]?

看起来微不足道.但是,想不出来!

有替代方法吗?

感谢您的回复.

更新正确的解决方案:

@CMS:感谢您的正确回复!

实现此目的的示例代码.

using (MemoryStream imageMemStream = new MemoryStream(fileData))
{
    using (Bitmap bitmap = new Bitmap(imageMemStream))
    {
        ImageFormat imageFormat = bitmap.RawFormat;
        if (bitmap.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
            //It's a JPEG;
        else if (bitmap.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))
            //It's a PNG;
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# image

80
推荐指数
4
解决办法
7万
查看次数

我怎么知道从流中获得的图像格式?

我从一些Web服务获得一个字节流.此字节流包含图像的二进制日期,我使用下面的方法将其转换为Image实例.

我需要知道我有什么样的形象.它是一个简单的位图(*.bmp)或JPEG图像(*.jpg)还是一个png图像?

我怎么能找到它?

    public static Image byteArrayToImage( byte[] bmpBytes )
    {
        Image image = null;
        using( MemoryStream stream = new MemoryStream( bmpBytes ) )
        {
            image = Image.FromStream( stream );
        }

        return image;
    }
Run Code Online (Sandbox Code Playgroud)

c# image

71
推荐指数
5
解决办法
7万
查看次数

如何确定文件是否是.NET中的图像文件?

我不想依赖文件扩展名.我不知道它是什么类型的图像(.jpg,.png等),我只是想知道文件是否是图像.如果可能的话,我宁愿不使用任何非.NET dll.

我知道如何做到这一点的最好方法如下:

bool isImageFile;
try
{
    Image.FromFile(imageFile).Dispose();
    isImageFile = true;
}
catch (OutOfMemoryException)
{
    isImageFile = false;
}
Run Code Online (Sandbox Code Playgroud)

如上所述:http://msdn.microsoft.com/en-us/library/stf701f5.aspx,如果文件不是有效的图像格式,则Image.FromFile()抛出一个OutOfMemoryException.使用上面给出了我想要的结果,但是由于以下原因我不想使用它:

  • 我认为,出于性能原因,使用try-catches进行正常程序执行是一种不好的做法.
  • Image.FromFile()将整个图像文件(如果是图像文件)加载到内存中.这是浪费我假设因为我只需要文件类型,并且在我的代码中此时不需要进行任何进一步的图像处理.
  • 我不喜欢捕捉OutOfMemoryExceptions,因为如果有一个真正的内存不足问题,我的程序吞下它并继续前进?

有没有更好的方法来做到这一点?或者,我上面列出的任何/所有问题都是无根据的?

编辑:自从收到答案后,这些是我现在知道的三个解决方案:

  1. 通过Image.FromFile()try-catch 将整个图像加载到内存中.
    • 优点:对图像文件内容进行更深入的检查; 涵盖了许多图像类型.
    • 缺点:最慢; 从try-catch开始并将完整的映像文件加载到内存中; 捕获'真实'OutOfMemoryException的潜在危险.
  2. 检查图像文件的标题字节.
    • 优点:快速,低内存使用率.
    • 缺点:可能脆弱; 需要为每种文件类型编程.
  3. 检查文件扩展名.
    • 优点:最快; 最简单的.
    • 缺点:不适用于所有情况; 最容易出错.

(我没有看到明确的"赢家",因为我可以想象每个人都适合的情况.对于我的应用程序的目的,文件类型检查不经常发生,方法1的性能问题不是问题.)

.net file-format file-type image

18
推荐指数
2
解决办法
4415
查看次数

如何为我的文件格式选择一个好的幻数?

我正在从头开始设计二进制文件格式,我想在开头包含一些魔术字节,以便可以轻松识别它.我该如何选择哪个字节?我不知道任何魔法数字的中央注册表,所以它只是选择一个相当随机的东西,而不是已经通过附近的UNIX盒子上的文件命令识别出来了吗?

file-format file magic-numbers

15
推荐指数
1
解决办法
1989
查看次数

验证上传的文件扩展名

上传文件工作正常,但现在我试图验证文件扩展名,看起来像有之间的一些干扰FileUpload1FileUpload2

FileUpload1用于上传 .jpg 或 .png 图像,以及FileUpload2上传 .pdf 文件。

这是在BtnInsert_Click事件上执行的代码:

protected void BtnInsert_Click(object sender, EventArgs e)
{
    string[] validPhotoFile = { ".jpg", ".png" };
    string validPDFFile = ".pdf";

    string photoExt = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
    string pdfExt = System.IO.Path.GetExtension(FileUpload2.PostedFile.FileName);

    bool isValidPhotoFile = false;
    bool isValidPDFFile = false;

    for (int i = 0; i < validPhotoFile.Length; i++)
    {
        if (photoExt == "." + validPhotoFile[i])
        {
            isValidPhotoFile = true;
            break;
        }
    }

    for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net validation

3
推荐指数
1
解决办法
2万
查看次数

如何检测流中的图像格式

我需要检测图像格式以保存图像,如image1.jpg,image2.gif,但我只有一个流,我不知道图像格式(gif,jpeg,png等)

有没有办法从流中检测图像格式?

.net c#

2
推荐指数
1
解决办法
6284
查看次数

如何使用它的内容检测文件格式

如果用记事本打开*.gif文件,文件将以GIF89开头

但是对于*.jpeg文件,第一个字符不像GIF89

如何用文件的第一个字符检测到我的文件是*.jpeg?

c c++

-3
推荐指数
1
解决办法
90
查看次数

标签 统计

c# ×4

.net ×3

image ×3

file-format ×2

asp.net ×1

c ×1

c++ ×1

file ×1

file-type ×1

magic-numbers ×1

validation ×1