主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

IronPython: Drawingクラスを使った画像のアルファブレンド

                
.NET FrameworkのGraphicsクラスで、イメージのアルファブレンドを行う。
方法としては、Bitmapインスタンスを作成しておいて、Graphics.FromImageメソッドでGraphicsを作成する。そこに一枚目の画像をDrawImageメソッドで描きこみ、二枚目をImageAttributesをいじって透明度を調整して上書きする。

130409blended.jpg

130409lenna.jpg

130409python.png


関数化
clr.AddReference("System.Drawing")

from System.Drawing import Graphics, Bitmap, Image, Drawing2D,\
Rectangle, GraphicsUnit, Imaging

def AlphaBlend(image1, image2, alpha):
blend = Bitmap(image1.Width, image1.Height)
blend_g = Graphics.FromImage(blend)
blend_g.DrawImage(im1, 0, 0)
colorMatrix = Imaging.ColorMatrix(((1, 0, 0, 0, 0),
(0, 1, 0, 0, 0),
(0, 0, 1, 0, 0),
(0, 0, 0, alpha, 0),
(0, 0, 0, 0, 1),))
imageAttributes = Imaging.ImageAttributes()
imageAttributes.SetColorMatrix(colorMatrix,
Imaging.ColorMatrixFlag.Default,
Imaging.ColorAdjustType.Bitmap)
blend_g.DrawImage(im2,
Rectangle(0, 0, im1.Width, im1.Height),
0, 0, im2.Width, im2.Height,
GraphicsUnit.Pixel,
imageAttributes)
blend_g.Dispose()
return blend


サンプル
import sys, System, clr

clr.AddReference("System.Drawing")

from System.Drawing import Graphics, Bitmap, Image, Drawing2D,\
Rectangle, GraphicsUnit, Imaging

def AlphaBlend(image1, image2, alpha):
blend = Bitmap(image1.Width, image1.Height)
blend_g = Graphics.FromImage(blend)
blend_g.DrawImage(im1, 0, 0)
colorMatrix = Imaging.ColorMatrix(((1, 0, 0, 0, 0),
(0, 1, 0, 0, 0),
(0, 0, 1, 0, 0),
(0, 0, 0, alpha, 0),
(0, 0, 0, 0, 1),))
imageAttributes = Imaging.ImageAttributes()
imageAttributes.SetColorMatrix(colorMatrix,
Imaging.ColorMatrixFlag.Default,
Imaging.ColorAdjustType.Bitmap)
blend_g.DrawImage(im2,
Rectangle(0, 0, im1.Width, im1.Height),
0, 0, im2.Width, im2.Height,
GraphicsUnit.Pixel,
imageAttributes)
blend_g.Dispose()
return blend

im1 = Image.FromFile(r"c:\users\h\desktop\130409lenna.jpg")
im2 = Image.FromFile(r"c:\users\h\desktop\130409python.png")
canvas = Bitmap(im1.Width, im1.Height * 11)
canvas_g = Graphics.FromImage(canvas)
for x in xrange(11):
blended = AlphaBlend(im1, im2, x * 0.1)
canvas_g.DrawImage(blended, 0, im1.Height * x)
canvas.Save(r"c:\users\h\desktop\blended.jpg")
canvas.Dispose()
            

コメントの投稿

非公開コメント

プロフィール

Matoba

Author:Matoba

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。