如何使用 .NET 从图像中删除颜色(颜色)配置文件信息?

发布于 2024-08-05 07:44:16 字数 232 浏览 11 评论 0原文

我有一个工具可以在运行时操作图像作为我的网络应用程序的一部分。

这通常工作正常,但随着 Firefox 3.5 的发布,我们看到了一些颜色问题。我相信这是因为 Firefox 3.5 现在支持嵌入式 ICC 颜色配置文件,这是其他浏览器所不具备的。

为了实现显示的一致性,我想以编程方式删除 .NET 代码中的所有 ICC 颜色配置文件。

有人能指出我正确的方向吗?

谢谢, - 克里斯

I have a tool which manipulates images at runtime as part of my web app.

This generally works fine, but with the release of Firefox 3.5 we're seeing some colour problems. I believe this is because Firefox 3.5 now supports embedded ICC colour profiles where no other browsers do.

In order to achieve consistency of display, I'd like to programatically remove any ICC colour profile in my .NET code.

Can anyone point me in the right direction?

Thanks,
- Chris

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眸中客 2024-08-12 07:44:16

经过进一步调查,IE 似乎注意到了一些 Gamma 校正信息,FireFox 3.5 注意到了嵌入的 ICC 颜色配置文件。

默认情况下,所有这些信息似乎都是由 .NET 框架的 PNG 实现添加的。

可以在 .NET 中删除此信息 - 我已经

On further investigation, it appears that IE was taking notice of some Gamma correction information, and FireFox 3.5 was taking notice of an embedded ICC colour profile.

All of this information appears to have been added by the .NET framework's PNG implementation by default.

It is possible to remove this information in .NET - I've blogged about it here.

維他命╮ 2024-08-12 07:44:16

这种方法可能有效(我没有测试过),尽管它可能有点过分:

public void StripBitmap(string path)
{
    Bitmap originalBitmap = (Bitmap)Bitmap.FromFile(path);
    Bitmap strippedBitmap = 
        new Bitmap(originalBitmap.Width, originalBitmap.Height);
    using (Graphics g = Graphics.FromImage(strippedBitmap))
    {
        g.DrawImage(originalBitmap, 0, 0);
    }
    System.Drawing.Imaging.ImageFormat fmt = originalBitmap.RawFormat;
    originalBitmap.Dispose();
    System.IO.File.Delete(path);
    strippedBitmap.Save(path, fmt);
    strippedBitmap.Dispose();
}

GDI+中的Bitmap类似乎不支持颜色配置文件,但如果它确实支持它们,我不认为它们将由上面示例中的 DrawImage 操作继承。

This method may work (I have not tested it), although it may be overkill:

public void StripBitmap(string path)
{
    Bitmap originalBitmap = (Bitmap)Bitmap.FromFile(path);
    Bitmap strippedBitmap = 
        new Bitmap(originalBitmap.Width, originalBitmap.Height);
    using (Graphics g = Graphics.FromImage(strippedBitmap))
    {
        g.DrawImage(originalBitmap, 0, 0);
    }
    System.Drawing.Imaging.ImageFormat fmt = originalBitmap.RawFormat;
    originalBitmap.Dispose();
    System.IO.File.Delete(path);
    strippedBitmap.Save(path, fmt);
    strippedBitmap.Dispose();
}

The Bitmap class in GDI+ does not appear to support color profiles, but if it does support them, I don't think they would be carried over by the DrawImage operation in the above sample.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文