0

私は画像のROIを取得することに取り組んできました。クリックして標準偏差を取得できるように、領域の周りを移動する正方形のボックスを取得しようとしています。私はcに精通しているので、cからVBへのコンバーターを使用しましたが、ステートメントが名前空間で無効であるというエラーが発生しました。すべてが VB コードと互換性があるようです。この件に関するご提案をお待ちしております。ありがとう

Private Function DrawRoi(Image As Bitmap, rect As RectangleF) As oid
Dim roi As New Rectangle()

roi.X = CInt(CSng(Image.Width) * rect.X)
roi.Y = CInt(CSng(Image.Height) * rect.Y)
roi.Width = CInt(CSng(Image.Width) * rect.Width)
roi.Height = CInt(CSng(Image.Height) * rect.Height)

Dim timer As New Stopwatch()
timer.Start()
' graphics manipulation takes about 240ms on 1080p image
Using roiMaskImage As Bitmap = CreateRoiMaskImage(ImageWithRoi.Width, ImageWithRoi.Height, roi)
    Using g As Graphics = Graphics.FromImage(ImageWithRoi)
        g.DrawImage(Image, 0, 0)
        g.DrawImage(roiMaskImage, 0, 0)
        Dim borderPen As Pen = CreateRoiBorderPen(ImageWithRoi)
        g.DrawRectangle(borderPen, roi)
    End Using
End Using
Debug.WriteLine("roi graphics: {0}ms", timer.ElapsedMilliseconds)
Me.imagePictureBox.Image = ImageWithRoi
End Function

Private Function CreateRoiMaskImage(width As Integer, height As Integer, roi As Rectangle) As Bitmap
Dim image As New Bitmap(width, height, PixelFormat.Format32bppArgb)
Using g As Graphics = Graphics.FromImage(image)
    Dim dimBrush As New SolidBrush(Color.FromArgb(64, 0, 0, 0))
    g.FillRectangle(dimBrush, 0, 0, width, height)
    Dim roiBrush As New SolidBrush(Color.Red)
    g.FillRectangle(roiBrush, roi)
    image.MakeTransparent(Color.Red)
    Return image
End Using
End Function
4

0 に答える 0