2

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 には、画像の正確な RGB タイプを示すことができる PixelFormat と PixelFormats も見つかりました。しかし、まだ img の System.Windows.Media.PixelFormat を取得する方法が見つかりません。どうすればいいですか?

4

3 に答える 3

3

BitmapDecoderそこからフレームを取得するには a を使用する必要があります。次に、カラー コンテキストを確認します。

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()) 処理して、それがどのプロファイルであるかを判断する必要があります。

プロファイルをディスクに書き込んで 16 進エディタなどでチェックする場合は、次のコードを使用できます。

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

その方法を使用して、sRGB (リンク) と Adob​​eRGB (リンク)の両方から生データを抽出しました(確認したい場合)。確認したい場合は、最初にマジック ストリングと ID がありますが、私はそれらを本当に知らないか、一般的なもののテーブルを見つける場所を知りません (埋め込まれたプロファイルは、AdobeRGB と sRGB に限定されず、無限である可能性があります)。

また、1 つの画像に複数のカラー プロファイルが含まれている場合もあります。

このメソッドでは、ColorContextsが空の場合、イメージにはプロファイルがありません。

于 2015-03-03T07:29:10.857 に答える