2017年6月28日水曜日

C# Magick.NETを使ってみる。その3

C# Magick.NETを使ってみる
目次→http://1studying.blogspot.jp/2017/07/c-magicknetmokuzi.html#kuw05

「Magick.NET」の使い方は
https://github.com/dlemstra/Magick.NET/tree/master/Documentation
に載っています

では続きを始めます。


「色深度」について


「色深度」は画像の1画素が持つ階調(データ量)の事です。
ビット深度とも呼ばれます。
・「RGB、CMYK、グレースケール」では、
 参照DLLが「Q8」なら「色深度8bit(0〜255)256階調」
 参照DLLが「Q16」なら「色深度16bit(0〜65535)65536階調」
 1画素あたり、
  RGBは「×3色分」
  CMYKは「×4色分」
  グレースケールは「×1色分」
  アルファチャンネルがある場合は「+1色分」
  のデータ量を必要とします。
 「RGB、各色深度8bit」の「24bit画像」を「トゥルーカラー」と呼びます。
・「モノクロ2階調」では、
 「色深度1bit(0〜1)2階調」
となります。

「Magick.NET」では「デプス」情報で色深度をbitで確認できます。
myMagick.Depth



色の指定


「Magick.NET」には色の指定方法がたくさん存在します。
更に、カラータイプの違いによっても指定の仕方が変化します。
ここで一度整理します。
            //「"xc:rgb(0,100%,0)"」を使用したパターン
            using (var myMagick = new ImageMagick.MagickImage("xc:rgb(0,100%,0)", 150, 150))
            {
                pictureBox1.Image = myMagick.ToBitmap(); //pictureBox1へ表示
            }
            //「new ImageMagick.MagickColor("rgb(0,100%,0)")」を使用したパターン
            using (var myMagick = new ImageMagick.MagickImage(new ImageMagick.MagickColor("rgb(0,100%,0)"), 150, 150))
            {
                pictureBox1.Image = myMagick.ToBitmap(); //pictureBox1へ表示
            }
カラー指定に「"xc:rgb(0,100%,0)"」や
「new ImageMagick.MagickColor("rgb(0,100%,0)")」を使用しています。
↓どちらで表示しても表示はこうなります。

コードの2行目の
「"xc:rgb(0,100%,0)"」の部分や
コードの7行目の
「new ImageMagick.MagickColor("rgb(0,100%,0)")」の部分は
様々な「色の指定の仕方」があります。説明します。



色の指定の仕方1(RGB)
通常のRGB値を表現する為に、
「"xc:lime"」や「"xc:rgb(0,100%,0)"」、
「new ImageMagick.MagickColor("lime")」、
「new ImageMagick.MagickColor("rgb(0,100%,0)")」、
のような指定の仕方が可能です。以下の形で色を指定します。
"lime"
//↓3種類とも「"rgb(0,100%,0)"」と同じ意味となります。
"#0f0"
"#00ff00"
"#0000ffff0000"
//↓使われているDLLが「Q8」でも「Q16」でも、
// 「255」が「100%」MAXとなります 。
"rgb(0,255,0)"
"rgb(0,100%,0)"
//%指定はfloat形式で書く事も出来ます。
"rgb(0.0%,100.0%,0.0%)"
「"rgb(0,255,0)"」のように指定した場合、
DLLが「Q8」でも「Q16」でも「255」が指定の上限値となります。

但しDLL「Q16」を使用して、
「new ImageMagick.MagickColor()」の引数をstringを使わないで直接指定した場合、
new ImageMagick.MagickColor(0, 65535, 0)
のように「65535」を上限値として書く形になるので注意して下さい。
この場合、「ImageMagick.Quantum.Max」を使って
new ImageMagick.MagickColor(0, ImageMagick.Quantum.Max, 0)
のように書いておけば「Q8」でも「Q16」でも常に上限値が入り、安心できます。



色の指定の仕方2(アルファ)
RGBA値はRGBにアルファを追加して表現します。。
アルファは必ず「0.0」(透明)〜「1.0」の間で表示させます。
(「#」表記の場合のみ「0〜f」、「00〜ff」、「0000〜ffff」も可)
以下の形で色を指定します。
//↓2種類とも「"rgba(0, 100%, 0, 0.5)"」と同じ意味となります。
"#00ff007f"
"#0000ffff00007f7f"
//↓使われているDLLが「Q8」でも「Q16」でも、
// RGB値は「255」が「100%」MAXとなります 。
// アルファは必ず「0.0」(透明)〜「1.0」で指定します。
"rgba(0, 255, 0, 0.5)"
"rgba(0, 100%, 0, 0.5)"
"rgb(0.0%, 100.0%, 0.0%, 0.5)"
//
//「"none"」と「"transparent"」は
//「"rgba(0, 0, 0, 0.0)"」と同じです。完全な透明を指します。
"none"
"transparent"
"rgba(0, 0, 0, 0.0)"
rgbaではstringで指定しない方法として、
「ImageMagick.MagickColors.Lime」のような指定の仕方も用意されています。



色の指定の仕方3(CMYK)
CMYKは以下のように指定します。
//CMYK
cmyk(25%, 50%, 75%, 100%)
//CMYK+アルファ
cmyka(25%, 50%, 75%, 100%, 0.5)//半透明



色の指定の仕方4(グレー)
グレーは「gray(50%)」のように指定します。
アルファ付きの場合は「graya(50%, 0.5)」の形で指定します。
「"gray0"」〜「"gray100"」や
RGB値それぞれ同じ値にしてもグレースケールとなるようです。(未確認)
//グレー0%
//  「"gray0"、"grey0"、"rgb(0%,0%,0%)"、
//  "rgb(0,0,0)"、"#000000"」等もあり?
"gray(0%)"
"gray(0%, 0.5)"//半透明
//グレー50%
//  「"gray50"、"grey50"、"rgb(50%,50%,50%)"、
//  "rgb(127,127,127)"、"#7f7f7f"」等もあり?
"gray(50%)"
"gray(50%, 0.5)"//半透明
//グレー100%
//  「"gray100"、"grey100"、"rgb(100%,100%,100%)"、
//  "rgb(255,255,255)"、"#ffffff"」等もあり?
"gray(100%)"
"gray(100%, 0.5)"//半透明



色の指定の仕方5(ICCプロファイル、デバイス)
ICCプロファイルを加味した色を指定できます。
デバイスを加味した色を指定もできます?
この辺の指定は詳しく調べきれませんでした。
//ICCプロファイルでの色指定
"icc-color(cmyk, 0.25, 0.50, 0.75, 1.00)"
"icc-color(rgb, white)"
//デバイスでの色指定
"device-gray(0.5)"
"device-rgb(0.5, 1.0, 0.0)"
"device-cmyk(0.25, 0.50, 0.75, 1.00) "




色の指定方法について、
より細かい色の指定方法は以下のサイトに記載されています。
https://www.imagemagick.org/script/color.php




「Photoshop」上での

「カラーモード」と「ICCプロファイル」


「Photoshop」では主に、
「RGB」「CMYK」「Gray」「2値」の「カラーモード」で作業を行います。
「カラーモード」を変更する時は、
「ICCプロファイル」のテーブルを使用して色変換を行います。
「ICCプロファイル」は
画像ファイルに埋め込まれた物や、「Photoshop」で設定してある物が使用されます。

「Magick.NET」では主に、
「Magick画像」の「カラータイプ」情報と「デプス」情報で、
「カラーモード」を推察する形となります。
「ColorType」情報が
 「TrueClor」の場合→「RGB」モード
 「ColorSeparation」の場合→「CMYK」モード
 「Palette」で
  「Depth」情報が
    「8bit」の場合→「Gray」モード
    「1bit」の場合→「2値」モード
となります。

画像情報について詳しくは、
C# Magick.NETを使ってみる。補足 画像情報取得
のリンク先で説明しています。
http://1studying.blogspot.jp/2017/07/c-magicknetmokuzi.html#kuw04


Photoshop上でのカラーモードとICCプロファイル
については以下のリンク先で説明しています。
http://1studying.blogspot.jp/2017/07/c-magicknetmokuzi.html#kuw06


C# Magick.NETを使ってみる。ICCプロファイル変換
については以下のリンク先で説明しています。
http://1studying.blogspot.jp/2017/07/c-magicknetmokuzi.html#kuw07










0 件のコメント:

コメントを投稿

↑Topへ