(74) 画像も描いてみた
基本的な図形は Draw / Add / Fill の Rectangle / Ellipse / Line / Triangle で描くとしても、やはり複雑な図形は無理があると思うわけです。
やってできなかあないかもしれませんが、ソース量は膨大になるわ描画自体にも時間がかかるわで、いいところが何もありません。
つことで、込み入った画像を表示させるには、やはりあらかじめそんな画像をファイルをして用意しておいてイメージとして描画するのが一般的な手段です。
ので、そのあたりの動作も確認しておきたいと思います。
で、こんな図形を用意してみました。
![20100508_001[1] 20100508_001](http://salvw.miscnotes.com/wp-content/uploads/image/2010/05/20100508_001.png)
まあこのくらいは描画オペレーションでも描けるんですが、動作検証用にはこのくらいシンプルな方がわかりやすいもんで。
これをイメージ(画像データ)として読み込んで GraphicsWindow に描画するというプログラムを実行させてみます。
今回は表示の結果をわかりやすくするために、いくつかよけいな機能を同時に実行しています。
- 重ね描きしたらどうなるかも知りたいので、あらかじめイメージの描画に半分かかる程度に背景を塗りつぶしています。
- 画像ファイルはローカルではなく、インターネット上のサーバーから取得しています。
また、URL が長すぎてしんどいので、短縮を行っています。
GraphicsWindow.PenColor=GraphicsWindow.GetColorFromRGB(91,118,255)
GraphicsWindow.FillRectangle(0,0,75,200)
pic1=ImageList.LoadImage("http://bit.ly/bv2zM8")
GraphicsWindow.DrawImage(pic1,50,50)
まあふつーに描けます。インターネット上のサーバーから画像ファイルを取得するのも、ローカルマシンから取得するより 1 拍かかる程度で、思ったほどのろいことにはなりません。
同じことを、GraphicsWindow.DrawImage ではなく Shapes.AddImage でもやってみます。
GraphicsWindow.PenColor=GraphicsWindow.GetColorFromRGB(91,118,255)
GraphicsWindow.FillRectangle(0,0,75,200)
pic1=ImageList.LoadImage("http://bit.ly/bv2zM8")
img1=Shapes.AddImage(pic1)
Shapes.Move(img1,50,50)
まあ結果は変わりません。.DrawImage とどう違うんだ、という結果になります。
で、どう違うんだと言われると、.AddImage は回転や移動のできる状態での描画ですので、回転や移動ができます。
移動は上述のコードでやっちゃってますので、回転もやってみます。
GraphicsWindow.PenColor=GraphicsWindow.GetColorFromRGB(91,118,255)
GraphicsWindow.FillRectangle(0,0,75,200)
pic1=ImageList.LoadImage("http://bit.ly/bv2zM8")
img1=Shapes.AddImage(pic1)
Shapes.Move(img1,50,50)
Shapes.Rotate(img1,30)
実は、透明や半透明にもできます。
GraphicsWindow.PenColor=GraphicsWindow.GetColorFromRGB(91,118,255)
GraphicsWindow.FillRectangle(0,0,75,200)
pic1=ImageList.LoadImage("http://bit.ly/bv2zM8")
img1=Shapes.AddImage(pic1)
Shapes.Move(img1,50,50)
Shapes.SetOpacity(img1,50)
.AddImage で描画すると、透明とか半透明とかができることはわかりました。
では、あらかじめ一部分だけ半透明にした画像ファイルを扱った場合はどうなるでしょうか。
ということで、一部分だけ半透明にした画像ファイルも用意してみました。

単純に先ほどの図形を 45 度回しただけのように見えますが、実は背景の白いところの透明度を変えた png ファイルになっています。
白じゃない背景色の中に置くと、
![]() |
右上が完全透過 ( 不透明度 0 % ) 、以下時計回りに右下が 75 %、左下が 50 %、左上が 25 % の不透明度となっています。
これを先ほどと同じように .DrawImage で描画すると、
GraphicsWindow.PenColor=GraphicsWindow.GetColorFromRGB(91,118,255)
GraphicsWindow.FillRectangle(0,0,125,200)
pic1=ImageList.LoadImage("http://bit.ly/c67wtE")
GraphicsWindow.DrawImage(pic1,50,50)
四隅が、元の画像で指定した不透明度に応じた透き通り具合で描画されることがわかります。
.AddImage でも
GraphicsWindow.PenColor=GraphicsWindow.GetColorFromRGB(91,118,255)
GraphicsWindow.FillRectangle(0,0,125,200)
pic1=ImageList.LoadImage("http://bit.ly/c67wtE")
img1=Shapes.AddImage(pic1)
Shapes.Move(img1,50,50)
同じように描画できます。
また、.AddImage の場合は、他の Add ~ 系と同様に移動・回転ができます。
GraphicsWindow.PenColor=GraphicsWindow.GetColorFromRGB(91,118,255)
GraphicsWindow.FillRectangle(0,0,125,200)
pic1=ImageList.LoadImage("http://bit.ly/c67wtE")
img1=Shapes.AddImage(pic1)
Shapes.Move(img1,50,50)
img2=Shapes.AddImage(pic1)
Shapes.Move(img2,50,120)
Shapes.Rotate(img2,30)
