Visual Basic 2008 проблемы с графикой (gdi+)

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Visual Basic 2008 проблемы с графикой (gdi+)

Сообщение DrKillJoy » 10.04.2011 (Вс) 18:21

Люди!!! Если тут кто-нибудь есть отзовитесь!!! Помогите очень нужно!!! Я долго искал по этой теме в интернете, но ничего не нашел!!! Если тут кто-то есть, может кто знает?!?!?!
Моя проблема:
Я в Visual Basic 2008 работаю с графикой (gdi+), отрисовываю в picturebox рисунок.
Вот код:
Код: Выделить всё
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox5.Paint
Dim pic As Bitmap
        pic = Image.FromFile("C:\door.bmp")       
        e.Graphics.DrawImage(pic, 0, 0)
End Sub


Затем мне нужно у отрисовонного изображения получить значение цвета, в каких либо точках:
Код: Выделить всё
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox2.MouseMove
        Dim a As Bitmap
        Dim b As Color
        a = PictureBox1.Image 'Здесь говорить, что nothing
        b = a.GetPixel(e.X, e.Y)
        Me.Text = b.ToString 'Здесь должен выводиться цвет
End Sub

Код правильный, но он не работает!!! Почему-то DrawImage не перерисовывает рисунок и Picturebox1.image остается пустой. Помогите!!! Мне очень нужно!!!

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Visual Basic 2008 проблемы с графикой (gdi+)

Сообщение Admiralisimys » 10.04.2011 (Вс) 22:46

DrKillJoy совершенно не правильно загружать картинку из файла каждый раз, когда понадобится перерисовка PictureBox. Правильно будет загрузить изображение единожды (например на старте формы).
А как же ему работать, если Bitmap ничем не инициализирован. Да и зачем перерисовывать изображение каждый раз при движении мыши.
Вот как можно поступить
Код: Выделить всё
Imports System
Imports System.Drawing
Imports System.Windows.Forms

Class LoadPicAndGetPix
    Inherits Form
    Dim img As Bitmap
    Shared Sub Main()
        Application.Run(New LoadPicAndGetPix())
    End Sub
    Sub New()
        img = Image.FromFile("C:\door.bmp")
    End Sub
    Protected Overrides Sub OnPaint(ByVal pea As PaintEventArgs)
        Dim grfx As Graphics = pea.Graphics()
        grfx.DrawImage(img, Point.Empty)
    End Sub
    Protected Overrides Sub OnMouseClick(ByVal mea As MouseEventArgs)
        Text = mea.X & " " & mea.Y & " " & img.GetPixel(mea.X, mea.Y).ToString
    End Sub
End Class

DrKillJoy
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 56
Зарегистрирован: 10.04.2011 (Вс) 10:06

Re: Visual Basic 2008 проблемы с графикой (gdi+)

Сообщение DrKillJoy » 11.04.2011 (Пн) 13:43

Очень дельные замечания. Но к сожалению, они не решают проблему!!!

Я после DrawImage, могу еще раз воспользоваться DrawImage и нарисовать маленький рисунок, точку или линию.
И эти точки не как не занесутся в переменную img, то есть при получении цвета точки, цвет будет браться, как из ("C:\door.bmp") и не будет смотреть на новые изменения.

Может я что-то не понимаю??? Но оно не работает!!!

ПОМОГИТЕ!!! ПОМОГИТЕ!!! ПОМОГИТЕ!!! ПОМОГИТЕ!!! ПОМОГИТЕ!!!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Visual Basic 2008 проблемы с графикой (gdi+)

Сообщение Хакер » 11.04.2011 (Пн) 13:50

DrKillJoy писал(а):ПОМОГИТЕ!!! ПОМОГИТЕ!!! ПОМОГИТЕ!!! ПОМОГИТЕ!!! ПОМОГИТЕ!!!

Если продолжишь писать в таком стиле, поможем прекратить писать в нём. Это предупреждение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: Visual Basic 2008 проблемы с графикой (gdi+)

Сообщение natcap » 16.04.2011 (Сб) 0:20

эм... ну начнем с того, что если код не работает то он НЕ ПРАВИЛЬНЫЙ
2. у 1 процедуры у тебя хендл от picturebox5, во второй от picturebox2, а обработать пытаешься picturebox1 - ничего не смущает? все нормально? ;)
3. у PictureBox если ты хочешь получать image, изволь его и загружать (PictureBox1.Image = pic)

вот тебе пример...
(кидаешь на форуму кнопку, текстовое поле, картинку я кинула в папку ресурсов, но не ресурсом, просто файл)

Код: Выделить всё
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim pic As Bitmap = New Bitmap("Resources/pic.jpg")
        Dim b As System.Drawing.Bitmap
        Dim g As System.Drawing.Graphics
        b = New System.Drawing.Bitmap(PictureBox1.Width, PictureBox1.Height, Imaging.PixelFormat.Format32bppRgb)
        g = System.Drawing.Graphics.FromImage(b)
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
        g.DrawImage(pic, 0, 0, PictureBox1.Width, PictureBox1.Height)
        g.DrawEllipse(Pens.Aqua, New Rectangle(New Point(50, 50), New Size(150, 150)))
        g.Dispose()

        pic = b
        PictureBox1.Image = pic
    End Sub

     Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        Dim a As Bitmap
        Dim b As Color
        If Not PictureBox1.Image Is Nothing Then
            a = PictureBox1.Image 'Здесь говорить, что nothing
            b = a.GetPixel(e.X, e.Y)
            TextBox1.BackColor = b
            Me.Text = b.ToString 'Здесь должен выводиться цвет
        End If
    End Sub
End Class


причем вот этот кусок
Код: Выделить всё
        Dim b As System.Drawing.Bitmap
        Dim g As System.Drawing.Graphics
        b = New System.Drawing.Bitmap(PictureBox1.Width, PictureBox1.Height, Imaging.PixelFormat.Format32bppRgb)
        g = System.Drawing.Graphics.FromImage(b)
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
        g.DrawImage(pic, 0, 0, PictureBox1.Width, PictureBox1.Height)
        g.DrawEllipse(Pens.Aqua, New Rectangle(New Point(50, 50), New Size(150, 150)))
        g.Dispose()

        pic = b

нужен только если ты графику какую-то добавляешь к картинке. а не берешь ее как есть из файла
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

    TopList