ルーター(WSR-5400AX6)からチョット離れた部屋でBDレコーダをネットに接続するためにWiFi設定をしたところ、受信レベルが1桁となった。新たなLANケーブルの配線は壁を通すなど面倒である。そこで、WiFiを中継して信号レベルを上げることができる無線LAN中継器を使ってみた。
購入した無線LAN中継器はバファローのWEX-733DHPSである。5GHzで433Mbps、2.4GHzで300Mbpsと1Gbpsを超える最新のものに比べるとそんなに早くないが、有線LAN端子も備えており、テスト用として、値段が安価(\1,980)なのでこれに決めた。
ルーター親機にAOSS機能があると簡単に接続出来るので、以下の手順で初期設定した。
中継器の設定が終了したら、実際に使いたいところのコンセントに中継器を差し込む。しばらく待っていると、「親機接続ランプ」が「緑点灯」し、接続完了。親機接続ランプが点滅している場合は、通信状態が悪いので、もっと親機に近いところのコンセントを利用すること。
中継器は親機の情報を引き継ぐので、中継器経由の場合でも設定を変更することなく、どちらかに自動で接続される。なお、複数の中継器を使う場合は、並列ではなく直列にする必要がある。中継器のSSIDはExtender-X-XXXXで、このSSIDで接続すると、中継器への接続が固定される。
中継器の設定が終了後、受信レベルが30前後と十分な値となった。また、この中継器には有線LAN出力もあるのでWifi入力の無いレコーダやパソコンにLANケーブルで接続出来る。
前報(abc830)で、DrawImageメソッドを使って、ピクチャーボックスに写真などの画像を表示する方法を紹介したが、画像(image)と描画(graphics)は以下のように違いがある。
ImageにはDrawLineメソッドなどが無いので、Graphics.FromImageメソッドでImageからGraphicsオブジェクトを取得し、そのGraphicsオブジェクトに描画を行うとImageに描画される。
Dim img As System.Drawing.Image = System.Drawing.Image.FromFile("C:\test.jpg")
Image は画像データに対する総称型であり、実際のインスタンスはSystem.Drawing.Image クラスを継承した画像クラスであるBitmap(.jpg/.bmp/.png/.gif/.tif)とImaging.Metafile(.wmf/.emfなど)からなる。
Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim ofd As New OpenFileDialog() With { .Title = "画像を選択", .Filter = “イメージファイル|*.bmp;*.jpg;*.gif;*.png" } If ofd.ShowDialog() <> DialogResult.OK Then Return End If Dim img = Image.FromFile(ofd.FileName) If img Is Nothing Then MessageBox.Show("ファイルが開けません") Return Else PictureBox1.Image = img End If End Sub End Class |
FileOpenダイアログで画像ファイルを選択 | ピクチャーボックスに画像を表示 |
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim sfd As New SaveFileDialog() with { .Title = "画像を保存", .Filter =“イメージファイル(*.jpg)|*.jpg" } If sfd.ShowDialog() <> DialogResult.OK Then Return End If TextBox1.Text = system.IO.Path.GetFileName(sfd.FileName) PictureBox1.Image.Save(sfd.FileName,System.Drawing.Imaging.ImageFormat.Jpeg) MessageBox.Show("画像を保存しました") End Sub |
画像を保存 |
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim gph As Graphics = Graphics.FromImage(PictureBox1.Image) Dim fnt As New Font("MS UI Gothic", 20) Dim brh As New SolidBrush(Color.Red) gph.DrawString("文字描画テスト", fnt, brh, 20, 20) PictureBox1.Refresh() '画像の再表示 fnt.Dispose() 'リソーズの解放 brh.Dispose() gph.Dispose() End Sub |
画像に文字を入れた例 |
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Dim img As New Bitmap(PictureBox1.Image) Dim gph As Graphics = PictureBox2.CreateGraphics() 'ColorMatrixオブジェクトの作成 Dim cmx As New System.Drawing.Imaging.ColorMatrix(New 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, 1, 0}, New Single() {1, 1, 1, 0, 1}}) Dim iat As New System.Drawing.Imaging.ImageAttributes() iat.SetColorMatrix(cmx) Dim rct = New Rectangle(0, 0, img.Width, img.Height) gph.DrawImage(img, rct, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, iat) gph.Dispose() img.Dispose() End Sub |
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click ・・・ Dim cmx As New System.Drawing.Imaging.ColorMatrix(New Single()() _ {New Single() {0.299F, 0.299F, 0.299F, 0, 0}, New Single() {0.587F, 0.587F, 0.587F, 0, 0}, New Single() {0.114F, 0.144F, 0.144F, 0, 0}, New Single() {0, 0, 0, 1, 0}, New Single() {0, 0, 0, 0, 1}}) ・・・ |
色反転(ネガ)の例 | モノクロ(グレースケール)化の例 |
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click Dim bmp As New Bitmap(PictureBox1.Image) For x As Integer = 0 To bmp.Width - 1 For y As Integer = 0 To bmp.Height - 1 Dim col As Color = bmp.GetPixel(x, y) Dim red As Integer = 255 - col.R Dim grn As Integer = 255 - col.G Dim blu As Integer = 255 - col.B bmp.SetPixel(x, y, Color.FromArgb(col.A, red, grn, blu)) Next Next PictureBox2.Image = bmp End Sub |
ビット単位で画像を反転 |
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click Dim bmp As New Bitmap(PictureBox1.Image) Dim gph = PictureBox2.CreateGraphics() Dim img = My.Resources.apple2 Dim iat As New System.Drawing.Imaging.ImageAttributes() iat.SetColorKey( Color.FromArgb(220, 220, 220), Color.FromArgb(255, 255, 255)) Dim rct1 = New Rectangle(0, 0, bmp.Width, bmp.Height) Dim rct2 = New Rectangle(100, 10, img.Width, img.Height) gph.DrawImage(btm, rct1, 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel) gph.DrawImage(img, rct2, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, iat) bmp.Dispose() gph.Dispose() img.Dispose() End Sub |
画像を重ねた例 |
リソースの追加画面 |
Matrixオブジェクトのアフィン行列 |
平行移動: | TranslateTransform(Single dx, Single dy) |
サイズ変更: | ScaleTransform(Single sclX, Single sclY) |
回 転: | RotateTransform(Single agl) |
設定初期化: | ResetTransform () |
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click Dim bmp As New Bitmap(PictureBox1.Width, PictureBox1.Height) Dim gph As Graphics = Graphics.FromImage(bmp) Dim img As Image = My.Resources.apple gph.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height)) gph.ResetTransform() gph.TranslateTransform(0, img.Height + 10) gph.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height)) gph.ResetTransform() gph.ScaleTransform(2.0F, 2.0F) gph.DrawImage(img, New Rectangle(50, 0, img.Width, img.Height)) gph.ResetTransform() gph.RotateTransform(45.0F) gph.DrawImage(img, New Rectangle(200, 60, img.Width, img.Height)) PictureBox1.Image = bmp img.Dispose() gph.Dispose() End Sub |
アフィン変換例 |
★ 画像を扱う方法は、他にも多数の方法があり、ココではその1例のみを紹介。
また、エラー処理を行っていないので、追加して下さい。(あくまでも自己責任で)