上へ G0001 色名一覧 G0002 アルファブレンド G0003 カラーマップを作る G0101 曲線の数値化 G0102 曲線長を測る G0103 曲線の接線・法線 G0104 曲線のスムージング G0201 図形の回転 G0202 領域の認識 G0301 文字の線形変換 G0302 文字の自由変形 G0303 文字の極座標変換 G0304 曲線に沿った文字列 G0305 飾文字-中抜き G0306 飾文字-縁取り G0307 飾文字-ドロップダウンシャドウ G0501 画像の線形変換 G0502 画像の透明化 G0503 画像の任意形状切出し G0504 画像の回転 G0505 画像の高速処理化
| |
VB.NET2005 TIPS / グラフィックス系 |
G0502 画像の透明化 |
最終更新:2006/11/12 再掲 |
●解説
透明化には大きく次の二通りある。
1.特定の色だけを透明化する。(アイコンなどの例がある)
特定の形状や対象物を抜き出すときなどに利用する。
2.画像全体を透明化する。これには、一律とグラデイエントがある。
視覚効果を出す。
|
|
|
例1:特定色(背景)の透明化 |
例2:一律透明化 |
例3:グラディエント |
上の例では、いずれも、赤、緑、青のチェック模様の上に画像を描画している。
●原理
いずれもアルファブレンド技術の応用である。特定色の場合は、通常の画像に適用してもあまり効果や意味がなく、特別に準備した画像の場合が多い。
●方法
1.特定色の透明化
BitmapオブジェクトのMakeTransparent(color)
を実行する。背景の透明化などに利用する。
2.画像全体(一律透明化)
ColorMatrixオブジェクトを利用する。ColorMatrixはピクセル単位で行列演算するもので、行列の内、アルファブレンド値のみに変化を加える。下図の行列で、上から1の部分はそれぞれ、R,G,B成分への演算係数となる。
Tがアルファ値(透過度)となる。T=0で完全透明、T=1で完全不透明となる。
|
ColorMatrixの例(アルファ値のみに作用するもの) |
3.グラディエント
透明度を漸次変化させる。この場合は、ColorMatrixは使用できない。ピクセルを一つ一つ取り出して、アルファ値を変化させる。
●事例
○例1:特定色
gはGraphics、picOrgに原画がある。recは適当なRectangleF
Dim bmp
As Bitmap = picOrg.Image.Clone
bmp.MakeTransparent(bmp.GetPixel(10, 10))
‘画像の隅を特定色としている
g.DrawImage(bmp, rec)
bmp.Dispose()
○例2:画像全体(一律透明化)
gはGraphics、picOrgに原画がある。recは適当なRectangleF
Dim tp As Single = (透過度)
Dim v()() As Single = {New Single() {1, 0, 0, 0, 0}, _
‘配列の配列となる
New Single() {0, 1, 0, 0, 0}, _
New Single() {0, 0, 1, 0, 0}, _
New Single() {0, 0, 0, tp, 0}, _
New Single() {0, 0, 0, 0, 1}}
Dim colM As New ColorMatrix(v)
Dim iAttr As New ImageAttributes()
Dim bmp As Bitmap = picOrg.Image.Clone
iAttr.SetColorMatrix(colM, ColorMatrixFlag.Default,
ColorAdjustType.Bitmap)
g.DrawImage(bmp, New Rectangle(rec.X, rec.Y, rec.Width, rec.Height), 0, 0,
bmp.Width, bmp.height, GraphicsUnit.Pixel, iAttr)
bmp.Dispose()
○例3:グラディエント
gはGraphics、picOrgに原画がある。recは適当なRectangleF
Dim bmp As Bitmap = picOrg.Image.Clone
Dim x, y As Integer
For x = 0 To bmp.Width - 1
For y = 0 To bmp.Height - 1
Dim oColor = bmp.GetPixel(x, y)
Dim nColor As Color = Color.FromArgb(x / bmp.Width * 256, oColor)
bmp.SetPixel(x, y, nColor)
Next
Next
g.DrawImage(bmp, rec)
bmp.Dispose()
|