相关疑难解决方法(0)

如何使用C#在ASP.NET中识别CMYK图像

有人知道如何使用C#在ASP.NET中正确识别CMYK图像吗?当我检查实例的Flags属性时Bitmap,我得到的结果不正确.

我已经创建了三个图像来测试它:cmyk.jpg,rgb.jpg和gray.jpg.这些分别是CMYK,RGB和灰度图像.

这是我的测试代码:

static void Main(string[] args)
{
    Bitmap bmpCMYK = new Bitmap("cmyk.jpg");
    Bitmap bmpRGB = new Bitmap("rgb.jpg");
    Bitmap bmpGray = new Bitmap("gray.jpg");

    Console.WriteLine("\t\tRgb\tCmyk\tGray\tYcbcr\tYcck\tPixelFormat");

    Console.WriteLine("cmyk.jpg\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
        IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceRgb),
        IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceCmyk),
        IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceGray),
        IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceYcbcr),
        IsSet(bmpCMYK, System.Drawing.Imaging.ImageFlags.ColorSpaceYcck),
        bmpCMYK.PixelFormat);

    Console.WriteLine("rgb.jpg\t\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
        IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceRgb),
        IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceCmyk),
        IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceGray),
        IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceYcbcr),
        IsSet(bmpRGB, System.Drawing.Imaging.ImageFlags.ColorSpaceYcck),
        bmpRGB.PixelFormat);

    Console.WriteLine("gray.jpg\t{0}\t{1}\t{2}\t{3}\t{4}\t{5}",
        IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceRgb),
        IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceCmyk),
        IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceGray),
        IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceYcbcr),
        IsSet(bmpGray, System.Drawing.Imaging.ImageFlags.ColorSpaceYcck),
        bmpGray.PixelFormat);

    bmpCMYK.Dispose();
    bmpRGB.Dispose();
    bmpGray.Dispose();

    Console.ReadLine();
}

private static bool IsSet(Bitmap bitmap, System.Drawing.Imaging.ImageFlags flag)
{
    return (bitmap.Flags & …
Run Code Online (Sandbox Code Playgroud)

asp.net bitmap image-processing cmyk

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

OutOfMemoryException:内存不足 - System.Drawing.Graphics.FromImage

使用System.Drawing.Graphics.FromImage(在Windows 2012服务器上使用最新版本的.NET软件)时,我会出现Out of Memory异常,仅限于极少数特定的图像文件.大多数情况下代码工作正常.

上述问题的典型答案表明某些资源尚未发布.

在回答之前请考虑以下事项: -

  • 此特定图像大小为34KB,是.JPG图像.服务器空闲,具有超过32GB的RAM.
  • 如果我查看这个jpg文件的属性,使用Windows资源管理器,通过右键单击文件,Windows说:96 dpi和32位深度.
  • 但是,如果我使用任何图形程序(例如photoshop)打开这个jpg文件,文件属性显示为: 72 dpi和24 bit深度.
  • 因此,我认为文件头属性所说的与文件实际包含的内容之间存在不匹配.
  • 此外,如果我使用图形程序打开jpg文件并且只是重新保存而不更改任何内容,则Windows资源管理器中的文件属性现在匹配/读取正确(72 dpi和24位深度); 并且文件由System.Drawing.Graphics正确处理,不会抛出异常.

由于我对该主题的了解有限,我不知道图像文件的文件头是否可以包含与实际文件内容不同的数据.

问题:

我该如何解决这个问题?或者,我如何告诉System.Drawing.Graphics忽略文件头数据,只看实际的图像文件内容?(因为像Photoshop这样的所有图形程序似乎都可以).

谢谢!

.net c# graphics system.drawing

11
推荐指数
2
解决办法
9868
查看次数

标签 统计

.net ×1

asp.net ×1

bitmap ×1

c# ×1

cmyk ×1

graphics ×1

image-processing ×1

system.drawing ×1