无法从具有索引像素格式

时间:2015-08-17 21:03:12

标签: vb.net vba

我有一个程序,当你点击picturebox1时,它会将里面的图像传输到picturebox2。然后我有一个插值代码将其修改为最近邻居像素渲染。它还在picturebox2上绘制一个像素网格,围绕像素排列。我有picturebox2设置拉伸图像。我在picturebox2上尝试了两种不同的绘图方法。我在将图像转换回正确的尺寸时遇到问题,在使用画笔编辑后将其转移回picturebox1。

CODE:

Imports System.Windows.Forms
Imports System.Drawing
Imports System
Imports System.IO

Public Class Form1
       Dim Brush = Brushes.Black
    Dim COLOR1 As Color
    Dim BMP As Bitmap
    Dim Draw As Boolean

代码:当你点击picturebox1(topleft)时,它将其图像传输到picturebox2(canvaseditor)进行网格绘制,插值模式等。

Private Sub topleft_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles topleft.Click
            tiledcanvas.BackgroundImage = topleft.Image
            Label1.Text = "Top-Left"

            'CANVAS PIXEL GRID CODE
            If topleft.Image Is Nothing Then
            Else
                canvaseditor.Image = Nothing
                canvaseditor.Image = topleft.Image
                canvaseditor.Width = topleft.Width * 8 + 1
                canvaseditor.Height = topleft.Height * 8 + 1
                'load and draw the image(s) once
                BackgroundImage1 = New Bitmap(topleft.Image)
                bmpNew = New Bitmap(canvaseditor.Width * scaleFactor, canvaseditor.Height * scaleFactor)
                Using g As Graphics = Graphics.FromImage(bmpNew)
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor
                g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half
                    g.DrawImage(BackgroundImage1, 0, 0, bmpNew.Width, bmpNew.Height)
                End Using
                canvaseditor.Focus()
                GroupBox13.Focus()
            End If
        End Sub

代码:picturebox2(canvaseditor)上的画笔代码,mousedown,mousemove和mouseup事件

Private Sub canvaseditor_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles canvaseditor.MouseMove

        If Draw = True Then
            PaintBrush(e.X, e.Y)

        Else
        End If


        'If down = True Then
        'canvaseditor.CreateGraphics.FillRectangle(Brush, e.X, e.Y, 8, 8)
        'End If

        ' LocalMousePosition = canvaseditor.PointToClient(Cursor.Position)
        'Dim X As Integer
        'Dim Y As Integer

        'If LocalMousePosition.X > 0 And LocalMousePosition.X < 9 Then
        'X = 1
        ' ElseIf LocalMousePosition.X > 8 And LocalMousePosition.X < 17 Then
        'X = 2
        'ElseIf LocalMousePosition.X > 16 And LocalMousePosition.X < 25 Then
        'X = 3
        'End If

        'Label6.Text = (X & ", " & Y)
        End Sub


    Private Sub PaintBrush(ByVal X As Integer, ByVal Y As Integer)
        Using g As Graphics = Graphics.FromImage(canvaseditor.Image)
            g.FillRectangle(New SolidBrush(Color.Black), New Rectangle(X, Y, 6, 6))
        End Using
        canvaseditor.Refresh()

    End Sub



        Private Sub canvaseditor_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles canvaseditor.MouseDown
        'down = True
        'If down = True Then
        'Dim NEWBMP As New Bitmap(topleft.Width, topleft.Height)
        'Dim graph As Graphics = Graphics.FromImage(NEWBMP)
        ' graph.FillRectangle(Brush, e.X, e.Y, 8, 8)
        'topleft.Image = NEWBMP
        'End If

        'down = True
        'If down = True Then
        'canvaseditor.CreateGraphics.FillRectangle(Brush, e.X, e.Y, 8, 8)
        'End If



        Draw = True
        PaintBrush(e.X, e.Y)





    End Sub



        Private Sub canvaseditor_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles canvaseditor.MouseUp
        Draw = False
        End Sub

并且继承了我制作的第一个油漆:

Private Sub canvaseditor_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles canvaseditor.Paint
            If Not bmpNew Is Nothing Then
                e.Graphics.DrawImage(bmpNew, 0, 0)
            End If

            Dim g As Graphics = e.Graphics
            Dim pn As New Pen(Color.DimGray) '~~~ color of the lines

            Dim x As Integer
            Dim y As Integer

            Dim intSpacing As Integer = 8  '~~~ spacing between adjacent lines

            '~~~ Draw the horizontal lines
            x = canvaseditor.Width
            For y = 0 To canvaseditor.Height Step intSpacing
                g.DrawLine(pn, New Point(0, y), New Point(x, y))
            Next

            '~~~ Draw the vertical lines
            y = canvaseditor.Height
            For x = 0 To canvaseditor.Width Step intSpacing
                g.DrawLine(pn, New Point(x, 0), New Point(x, y))
            Next
        End Sub

希望这是可以理解的,这样有人可以指出我正确的方向。感谢。

0 个答案:

没有答案