gpt4 book ai didi

c# - 获取 RGB 类型 : sRGB or AdobeRGB in C#?

转载 作者:行者123 更新时间:2023-11-30 20:44:57 25 4
gpt4 key购买 nike

我需要检查我的 WEB 应用程序中的图片是 sRGB 还是 Adob​​e RGB。有没有办法准确知道图片的RGB是多少?

更新:尝试使用 Color.Context,但它始终为 null

代码

Bitmap img = (Bitmap)image;
var imgPixel = img.GetPixel(0,0);
System.Windows.Media.Color colorOfPixel= System.Windows.Media.Color.FromArgb(imgPixel.A,imgPixel.R, imgPixel.G, imgPixel.B);
var context = colorOfPixel.ColorContext; //ColorContext is null

在 System.Windows.Media 中还发现了 PixelFormat 和 PixelFormats,它们可以显示图像的确切 RGB 类型。但我仍然找不到获取 img 的 System.Windows.Media.PixelFormat 的方法。我应该怎么做?

最佳答案

您需要使用 BitmapDecoder 从那里获取框架,然后检查颜色上下文:

BitmapDecoder bitmapDec = BitmapDecoder.Create(
new Uri("mybitmap.jpg", UriKind.Relative),
BitmapCreateOptions.None,
BitmapCacheOption.Default);
BitmapFrame bmpFrame = bitmapDec.Frames[0];
ColorContext context = bmpFrame.ColorContexts[0];

之后,您需要处理原始颜色配置文件(使用 context.OpenProfileStream())以确定它是哪个配置文件。

如果您想将配置文件写入磁盘以使用十六进制编辑器或其他工具检查它们,您可以使用以下代码:

using(var fileStream = File.Create(@"myprofilename.icc"))
using (var st = context.OpenProfileStream())
{
st.CopyTo(fileStream);
fileStream.Flush(true);
fileStream.Close();
}

使用该方法,如果您想检查它们,我已经从 sRGB ( link ) 和 Adob​​eRGB ( link ) 中提取了原始数据。如果你想检查的话,开头有魔法字符串和 ID,但我真的不知道它们或不知道在哪里可以找到常见的表格(嵌入的配置文件可能是无限的,不限于 Adob​​eRGB 和 sRGB)。

此外,一张图片可能有不止一种颜色配置文件。

使用此方法,如果 ColorContexts 为空,则图像没有任何配置文件。

关于c# - 获取 RGB 类型 : sRGB or AdobeRGB in C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28733835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com