Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

sergiofer

Desenho sobre imagens

Mensagens Recomendadas

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á

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.