Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

sergiofer

Desenho sobre imagens

Recommended Posts

sergiofer

Olá a todos

Há já algum tempo que não apareço, porque tenho andado um pouco ocupado.

O meu problema agora é o seguinte, tenho uma form com uma imagem (picturebox), e pretendo desenhar uma elipse, na posição onde clico o rato.

O meu código é o seguinte:

  ' ----- definindo objetos para desenho
        Dim usarLinha As Pen
        Dim usarPreenchimento As Brush
        Dim pinta As Graphics
        Dim desenharContornos As Rectangle


        pinta = PictureBox1.CreateGraphics()

        desenharContornos = New Rectangle( _
           Math.Min((Control.MousePosition.X - 5), (Control.MousePosition.X + 5)), _
           Math.Min((Control.MousePosition.Y - 5), (Control.MousePosition.Y + 5)), _
           Math.Abs((Control.MousePosition.X - 10) - (Control.MousePosition.X + 10)), _
           Math.Abs((Control.MousePosition.Y - 10) - (Control.MousePosition.Y + 10)))

        usarLinha = New Pen(Color.Yellow)
        usarPreenchimento = New SolidBrush(Color.Yellow)


        pinta.FillEllipse(usarPreenchimento, desenharContornos)
        pinta.DrawEllipse(usarLinha, desenharContornos)

O que se passa, é que a elipse é desenhada muito fora da posição onde clico o rato, alguem me pode ajudar a entender o que estou a fazer mal?

Obrigado desde já

Share this post


Link to post
Share on other sites
sergiofer

Boa noite

Este problema foi resolvido, está o código, caso alguem esteja interessado:

 Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click


        Dim MouseClickPositionX As Decimal
        Dim MouseClickPositionY As Decimal

        'Grava a Posição onde foi clicado o mouse
        LocalMousePosition = PictureBox1.PointToClient(Cursor.Position)

        MouseClickPositionX = LocalMousePosition.X
        MouseClickPositionY = LocalMousePosition.Y

        '*********************************
        ' ----- definindo objetos para desenho
        Dim CorLinha As Pen
        Dim CorPreenchimento As Brush
        Dim Desenha As Graphics
    
        Dim Altura As Decimal
        Dim Largura As Decimal

        Altura = 10
        Largura = 10

        Desenha = PictureBox1.CreateGraphics()

        CorLinha = New Pen(Color.Black)
        CorPreenchimento = New SolidBrush(Color.Yellow)


        ' pinta.FillEllipse(usarPreenchimento, desenharContornos)
        'pinta.DrawEllipse(usarLinha, desenharContornos)
        Desenha.DrawEllipse(CorLinha, (MouseClickPositionX - (Largura / 2)), (MouseClickPositionY - (Largura / 2)), 10, 10)

        Desenha.FillEllipse(CorPreenchimento, (MouseClickPositionX - (Altura / 2)), (MouseClickPositionY - (Altura / 2)), 10, 10)

    End Sub

Sérgio

Share this post


Link to post
Share on other sites
sergiofer

Olá novamente

Agora pretendo remover o ultimo objecto que foi desenhado sobre o picture box, mas não estou a conseguir fazer nada de jeito.

Alguem me pode ajudar

Obrigada desde já

Sérgio

Share this post


Link to post
Share on other sites
ribeiro55

Não pode ser feito.

Pelo menos não com a facilidade com que julgas que pode ser feito :down:

Podes recorrer à imaginação e utilizar algumas técnicas como, por exemplo (lembrei-me desta agora mesmo):

-Armazenar todos os pontos originais correspondentes aos que o novo desenho está a ocupar?

-Armazenar toda região antes de aplicar o novo objecto, para poder voltar atrás?

Tens de decidir o que é melhor para a tua necessidade específica.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
sergiofer

Estou a pensar gravar as coordenadas do que quero desenhar num datagrid, e depois posso voltar atrás, atraves do argumento

PictureBox1.Image = PictureBox1.InitialImage

Penso que estou no bom caminho, mas ainda estou com alguns problemas.

Obrigado pela ajuda

Sérgio

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.