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

Joca

[Resolvido] Como fazer zoom da imagem na picturebox?

Recommended Posts

Joca

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?

Share this post


Link to post
Share on other sites
Joca
'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

Share this post


Link to post
Share on other sites
jpaulino

>> 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.

Share this post


Link to post
Share on other sites
Joca

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?

Share this post


Link to post
Share on other sites
José Lopes

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!


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
jpaulino

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.

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.