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

Joca

[Resolvido] Como fazer zoom da imagem na picturebox?

8 mensagens neste tópico

Aqui há alguns meses atrás criei um projecto de teste, no qual fazia o zoom da imagem numa picturebox à qual tinha adicionado um painel.

Infelizmente não consigo localizar esse projecto.

Salvo erro esse zoom era feito clicando na imagem, através do evento click da picturebox.

O valor a aumentar era através de um número positivo escrito na textbox. O valor a reduzir seria obtido quando se inseria valores negativos.

Alguém me pode dar uma luzinha pois, já não tenho a certeza como fiz.

Penso que era só exibir as scrollbars do painel com autoscroll como true.

E, na picturebox o size mode era de autosize.

Estou a pensar bem?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
'Fiquei com algumas dúvidas nesse link que disponibilizou... Será que realmente é melhor deixar de usar picturebox?!
'
'Entretanto, deparei-me com outra informação no link que indico a seguir. 
'O processo de utilzação do programa é escrever o zoom que se pretende e, depois clicar no botão.
'
'No entanto, se faço, por exemplo:
'- escrevo 100 na textbox e clico no botão;
'- e, depois escrevo 1000 e clico no botão...o programa pára, momentaneamente, durante o processo de aumento da imagem. É esta uma das razões para desistir das pictureboxes?!
'
'Este princípio é errado? Uma barra de zoom seria melhor para este efeito?


'http://www.dreamincode.net/code/snippet2372.htm
Imports System.Drawing.Drawing2D


Public Class Form1

    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        With Panel1
            .AutoScroll = True
        End With

        With PictureBox1
            .SizeMode = PictureBoxSizeMode.AutoSize
        End With

        Button1.Enabled = False
        
    End Sub

    Public Function ZoomImageFunction(ByVal img As System.Drawing.Image, ByVal ZoomValue As Int32) As System.Drawing.Image
        Dim width As Int32 = Convert.ToInt32(img.Width * ZoomValue) / 100
        Dim height As Int32 = Convert.ToInt32(img.Height * ZoomValue) / 100
        'Create a new image based on the zoom parameters we require
        Dim zoomImage As New System.Drawing.Bitmap(img, width, height)

        'Create a new graphics object based on the new image
        Dim converted As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(zoomImage)

        'Clean up the image
        converted.InterpolationMode = InterpolationMode.HighQualityBicubic

        'Return the zoomed image
        Return zoomImage
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        PictureBox1.Image = ZoomImageFunction(Image.FromFile("c:\NomeDaImagem.bmp"), TextBox1.Text)

    End Sub

   
    
    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

        If Char.IsDigit(e.KeyChar) And TextBox1.SelectionStart <> 0 Then
            Button1.Enabled = True
        Else
            Button1.Enabled = False
        End If

    End Sub
End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

>> Uma barra de zoom seria melhor para este efe

Leva sempre algum tempo a carregar ... mas talvés possas usar outra solução como um numericupdown ou outro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E, esta "sensação" de que o programa não vai executar a tarefa...

Isto é, como evitar a "ideia" que o utilizador vai ter, de que o programa "bloqueou"?

Será que deveria implementar uma label a informar "em execução", e recuso a aceitação de qualquer tarefa adicional (como um clique do rato em qualquer sítio da form1), enquanto a tarefa não estiver completa?

É possível fazer algo assim, ou então, outra coisa qualquer, que evite esta "ideia" de "paragem" do programa?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes sempre por isso numa thread... assim... o utilizador vai ser informado que isso está a ser processado... e não fica a tentar mexer no form.. para depois o utilizador ficar com a sensação que o programa crashou!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes sempre por isso numa thread... assim... o utilizador vai ser informado que isso está a ser processado... e não fica a tentar mexer no form.. para depois o utilizador ficar com a sensação que o programa crashou!

É bem pensado ... até podes colocar um gif animado a mostrar que está a actualizar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pelas sugestões. :)

Vou pensar qual será a melhor opção em termos de código.

0

Partilhar esta mensagem


Link 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