ホーム ] TIPS ウィンドウズ系 ] TIPS グラフィックス系 ] TIPS メルチメディア系 ] TIPS 理数系 ] TIPS 総覧 ]

上へ
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()