• 締切済み

グラフィックスの読み取りについて。

Option Strict On 'VisualBasic2008(無料版) Imports System.Drawing.Drawing2D Public Class Form1 Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint Dim myFont As New Font("Arial", 20, FontStyle.Bold) e.Graphics.DrawString("7", myFont, Brushes.Red, 0, 0) End Sub End Class 例えば、こんな感じのプログラムがあるとします。 PictureBox1のサイズは25*25です。 PictureBox1内のグラフィックスの読み取りがしたいのです。 質問__1 ドット単位で625のデータをARGBで読み取り配列に格納したいです。 質問__2 グラフィックスが表示されてる場合は1を代入、表示されてない場合は0を代入、配列に入れたいです。イチゼロデータを作りたいです。 よろしくお願いします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

お示しのコードが Paintイベントだったので動作に支障のないようにして Imageプロパティに設定できる方法を探ったため 前回の回答の内容になっています 別に 引数のe.GraphicsをDisposeするわけではないので問題ありませんよ gを新規で定義しているのはbmpに描画するためです 描画し終わったので gをDisposeして bmpとの接続を切ります Paintイベントではなく Loadイベントなどで行ってもいいですよ Loadイベントの場合は 引数eには Graphicsはありませんので 新規に gなどを定義する必要があります

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

描画時に Bitmapを生成したほうが楽に処理できそうですよ Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint   if PictureBox1.Image Is Nothing then     Dim myFont As New Font("Arial", 20, FontStyle.Bold)     dim bmp as new Bitmap( 25, 25 )     dim g as Graphics = Graphics.FromImage(bmp)     g.DrawString("7", myFont, Brushes.Red, 0, 0)     g.dispose()     PictureBox1.Image = bmp   end if End Sub といった具合にしておきます 1/0 のデータを取得するには ' ピクチャーボックスのBitmapを取得 dim bmp as Bitmap = PictureBox1.Image ' 生データの取得準備 dim bmpData as Drawing.Imaging.BitmapData = _   bmp.LockBits(New Rectangle(0, 0, 25, 25), Imaging.ImageLockMode.ReadWrite, _   bmp.PixelFormat) ' データ長の計算 RGBAで取得なので *4 dim nLen as Integer = Bmp.Width * bmp.Height * 4 dim arData( nLen - 1 ) as byte Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, arData, 0, nLen) bmp.UnlockBits( bmpData ) ' 0/1用のデータ配列 dim arBW( nLen / 4 -1 ) as Byte for n as Integer = 1 to nLen step 4   arBW(n / 4) = (arData(n) = 255) next といった具合でしょう

gcqd75ce
質問者

補足

まだコードは試していません。 気になる点について。 1 Paintイベント内でdisposeを使用しても良いのですか? 2 なぜ?eのとこをgにする必要があるのですか? 初心者なので。

関連するQ&A