Visual Basicで画像の色相を変更するプログラムを作成したいと考えております。
RGB値をそれぞれマイナスしたいのです。
ネットで参考コードを探していたところ、
VB.NETという言語のソースが出てきて、
それが一番自分がやりたいことに近いので参考にさせていただきたいのですが、
VBが全くの初心者で、そちらのサイトを読んでもいまいち始め方が分からず、困っております。
Visual Basic Studio 2015 をダウンロードしてみたのですが、
Form のところに入力していけばできるのでしょうか?
また、そちらのサイトに書いてあった、
赤色を128マイナスするというプログラムのソースが
VB
1'Imports System.Drawing 2'Imports System.Drawing.Imaging 3 4''' <summary> 5''' 指定した画像の色を補正する 6''' </summary> 7''' <param name="img">補正する画像</param> 8''' <param name="rValue">赤の増加値(-255~255)</param> 9''' <param name="gValue">緑の増加値(-255~255)</param> 10''' <param name="bValue">青の増加値(-255~255)</param> 11Public Shared Sub AdjustColorImage( _ 12 ByVal img As Bitmap, ByVal rValue As Integer, _ 13 ByVal gValue As Integer, ByVal bValue As Integer) 14 '1ピクセルあたりのバイト数を取得する 15 Dim pixelFormat As PixelFormat = img.PixelFormat 16 Dim pixelSize As Integer = Image.GetPixelFormatSize(pixelFormat) / 8 17 If pixelSize < 3 OrElse 4 < pixelSize Then 18 Throw New ArgumentException( _ 19 "1ピクセルあたり24または32ビットの形式のイメージのみ有効です。", _ 20 "img") 21 End If 22 23 'または次のように元の画像とは異なるPixelFormatでLockBitsすることも可能 24 'この場合、UnlockBitsで元のPixelFormatに戻る 25 'ただし、元のPixelFormatとLockBits時のPixelFormatが異なる場合は、 26 '変更した色とは異なる色になる可能性がある 27 'pixelFormat = PixelFormat.Format32bppArgb 28 'pixelSize = 4 29 30 'Bitmapをロックする 31 Dim bmpDate As BitmapData = _ 32 img.LockBits(New Rectangle(0, 0, img.Width, img.Height), _ 33 ImageLockMode.ReadWrite, img.PixelFormat) 34 35 If bmpDate.Stride < 0 Then 36 img.UnlockBits(bmpDate) 37 Throw New ArgumentException( _ 38 "ボトムアップ形式のイメージには対応していません。", _ 39 "img") 40 End If 41 42 'ピクセルデータをバイト型配列で取得する 43 Dim ptr As IntPtr = bmpDate.Scan0 44 Dim pixels As Byte() = New Byte(bmpDate.Stride * img.Height - 1) {} 45 System.Runtime.InteropServices.Marshal.Copy(ptr, pixels, 0, pixels.Length) 46 47 'すべてのピクセルの色を補正する 48 For y As Integer = 0 To bmpDate.Height - 1 49 For x As Integer = 0 To bmpDate.Width - 1 50 'ピクセルデータでのピクセル(x,y)の開始位置を計算する 51 Dim pos As Integer = y * bmpDate.Stride + x * pixelSize 52 '新しい色を計算する 53 Dim newR As Integer = _ 54 Math.Max(0, Math.Min(255, pixels(pos + 2) + rValue)) 55 Dim newG As Integer = _ 56 Math.Max(0, Math.Min(255, pixels(pos + 1) + gValue)) 57 Dim newB As Integer = _ 58 Math.Max(0, Math.Min(255, pixels(pos) + bValue)) 59 '色を変更する 60 pixels(pos + 2) = CByte(newR) 61 pixels(pos + 1) = CByte(newG) 62 pixels(pos) = CByte(newB) 63 Next 64 Next 65 66 'ピクセルデータを元に戻す 67 System.Runtime.InteropServices.Marshal.Copy(pixels, 0, ptr, pixels.Length) 68 69 'ロックを解除する 70 img.UnlockBits(bmpDate) 71End Sub 72 73'PictureBox1のClickイベントハンドラ 74Private Sub PictureBox1_Click(ByVal sender As Object, ByVal e As EventArgs) _ 75 Handles PictureBox1.Click 76 '色補正をする画像 77 Dim img As New Bitmap("C:\test\1.png") 78 '赤を128増加させる 79 AdjustColorImage(img, 128, 0, 0) 80 'PictureBox1に表示 81 If Not PictureBox1.Image Is Nothing Then 82 PictureBox1.Image.Dispose() 83 End If 84 PictureBox1.Image = img 85End Sub
なのですが、これは何が省略されているのでしょうか。
構文等も分からないので、省略されている部分を丁寧に教えていただける方がいらっしゃいましたらよろしくお願い致します。
画像を選択すると、その画像の色相が変更されて出てくる、というページを作成したいのです。
Rの値だけでなく、G,Bも変更したいと考えております。
一緒に考えてくれる方、よろしくお願い致します。
また、こちらのテラテイルも初めて使わせていただきますので、
質問の仕方が間違っていたり、不快な思いをした方がいらっしゃいましたら申し訳ございません。。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/11/24 12:28
2016/11/24 23:53