Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
DrawImageを使った画像の拡大について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9544#CommentId14145
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
反る戸
 (社会人)
投稿日時
2010/2/9 03:39:42
DrawImageを使って、画像の一部を拡大し、それを敷き詰めて別の画像
を作成しようと思ったのですが、うまくいきません。
次のような画像があるとします。本当はもう少し大きいのですが、説明
の都合で、6×3ピクセルの大きさで、赤(r)と緑(g)のピクセルが交互に
並んでいるとします。
rgrgrg
grgrgr
rgrgrg
これを縦横2倍18×6ピクセルにした場合、補間を最低品質にすれば、
以下のようになると期待します。
rrggrrggrrgg
rrggrrggrrgg
ggrrggrrggrr
ggrrggrrggrr
rrggrrggrrgg
rrggrrggrrgg
ところが実際には次のように右端と下端は何も描画してくれません。
0というのは描画しない、又は、透明で描画しているということです。
rggrrggrrgg0
grrggrrggrr0
grrggrrggrr0
rggrrggrrgg0
rggrrggrrgg0
000000000000
これを調べる為に以下のようなプログラムを実行してみました。2倍の
場合、上記のような描画になり、2倍+1ピクセルに拡大すると、当初に
期待したような描画になります。しかし、うまくいくのは2倍だけで3倍
になると、2倍でも、2倍+1でもうまくいきません。うまくいかないと
いうのは、3×3の四角が交互に並んだような画像にならないということ
です。
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim imgWid As Integer = Me.PictureBox1.Width
Dim imgHei As Integer = Me.PictureBox1.Height
Dim mag As Integer = 2 ' 拡大率
Dim gr2 As Graphics
Dim gr3 As Graphics
Dim gr4 As Graphics
Dim rect1 As Rectangle = New Rectangle(0, 0, imgwid, imghei)
Dim rect2 As Rectangle = New Rectangle(0, 0, imgWid, imgHei)
Dim rect3 As Rectangle = New Rectangle(0, 0, mag * imgWid, mag * imgHei)
Dim rect4 As Rectangle = New Rectangle(0, 0, mag * imgWid + 1, mag * imgHei + 1)
Me.PictureBox1.Image = Image.FromFile("..\..\..\RedGreen.png")
Me.PictureBox2.Image = New Bitmap(imgwid, imghei)
Me.PictureBox3.Image = New Bitmap(mag * imgWid, mag * imgHei)
Me.PictureBox4.Image = New Bitmap(mag * imgWid, mag * imgHei)
gr2 = Graphics.FromImage(Me.PictureBox2.Image)
gr3 = Graphics.FromImage(Me.PictureBox3.Image)
gr4 = Graphics.FromImage(Me.PictureBox4.Image)
gr2.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
gr3.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
gr4.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
gr2.DrawImage(Me.PictureBox1.Image, rect2, rect1, GraphicsUnit.Pixel)
gr3.DrawImage(Me.PictureBox1.Image, rect3, rect1, GraphicsUnit.Pixel)
gr4.DrawImage(Me.PictureBox1.Image, rect4, rect1, GraphicsUnit.Pixel)
End Sub
End Class
DrawImageの使い方について、私が何か勘違いをしているのか、それ
とも、他の方法を使うべきなのか、ご教示いただければ幸いです。