none
Duvida para salvar imagem de um picturebox RRS feed

  • Pergunta

  • Olá

    Eu tenho um PictureBox, nele eu abro imagens do tipo .bmp, .jpg, .jpge, .png.

    Porem digamos que as imagens que eu abro nele tem tamanho 800x600, e o meu PictureBox tem 240x200, porem eu coloco no modo zoom e a imagem fica certinha no PictureBox.

    Agora o meu problema é para salvar, eu tenho que pegar essa imagem e salvar ela, mas eu quero que ela fique do tamanho do PictureBox (240x200), e o nome dessa nova imagem que será salva tem que ser o mesmo nome da imagem que eu abri p\ colocar no PictureBox. E todas as imagens que eu colocar no PictureBox independente do seu formato, eu quero que elas sempre sejam salvas em .jpg (q eu acho que deve ser o formato mais compacto).

    Como eu faço isso ?

    Obrigado

    sábado, 30 de outubro de 2010 02:34

Respostas

  • Fiz um exemplo pra você que ficou assim:

    - Variável Global para armazenar o caminho da Imagem que foi carregada:

      Private caminhoArquivo As IO.FileInfo

    - Click do Botão Abrir Imagem:

      Private Sub btnAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbrir.Click
        Dim fileDialog As New OpenFileDialog
        fileDialog.ShowDialog()
        If Not fileDialog.FileName.Equals(String.Empty) Then
          caminhoArquivo = New IO.FileInfo(fileDialog.FileName)
          PictureBox1.Image = New Bitmap(caminhoArquivo.FullName)
        End If
      End Sub

    - Método que Redimensiona a Imagem:

     Private Function resizeImage(ByVal imgToResize As Image, ByVal size As Size) As Image
        Dim sourceWidth As Integer = imgToResize.Width
        Dim sourceHeight As Integer = imgToResize.Height

        Dim nPercent As Single = 0
        Dim nPercentW As Single = 0
        Dim nPercentH As Single = 0

        nPercentW = (CSng(size.Width) / CSng(sourceWidth))
        nPercentH = (CSng(size.Height) / CSng(sourceHeight))

        If nPercentH < nPercentW Then
          nPercent = nPercentH
        Else
          nPercent = nPercentW
        End If

        Dim destWidth As Integer = CInt(sourceWidth * nPercent)
        Dim destHeight As Integer = CInt(sourceHeight * nPercent)

        Dim b As New Bitmap(destWidth, destHeight)
        Dim g As Graphics = Graphics.FromImage(DirectCast(b, Image))
        g.InterpolationMode = InterpolationMode.HighQualityBicubic

        g.DrawImage(imgToResize, 0, 0, destWidth, destHeight)
        g.Dispose()

        Return DirectCast(b, Image)
      End Function

    - E o Botão que Salva a Imagem:

      Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click

        Dim tamanho As New Size(240, 200)
        Dim imagemRedimensionada As Image
        imagemRedimensionada = resizeImage(PictureBox1.Image, tamanho)

        Dim saveBrowser As New SaveFileDialog
        saveBrowser.Filter = "(*.jpg)|*.jpg"
        saveBrowser.FileName = caminhoArquivo.Name.Replace(caminhoArquivo.Extension, String.Empty)
        saveBrowser.ShowDialog()
        If Not saveBrowser.FileName.Equals(String.Empty) AndAlso caminhoArquivo IsNot Nothing Then
          imagemRedimensionada.Save(saveBrowser.FileName, Imaging.ImageFormat.Jpeg)
          caminhoArquivo = Nothing
        End If
      End Sub

    Fiz dessa forma só para te dar a idéia de como fazer, você pode ajustar da forma que precisar usar. Espero que seja isso.


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    sábado, 30 de outubro de 2010 05:09
  • Independente do que tem no PictureBox voce tem que colocar esse método:

     Private Function resizeImage(ByVal imgToResize As Image, ByVal size As Size) As Image
        Dim sourceWidth As Integer = imgToResize.Width
        Dim sourceHeight As Integer = imgToResize.Height

        Dim nPercent As Single = 0
        Dim nPercentW As Single = 0
        Dim nPercentH As Single = 0

        nPercentW = (CSng(size.Width) / CSng(sourceWidth))
        nPercentH = (CSng(size.Height) / CSng(sourceHeight))

        If nPercentH < nPercentW Then
          nPercent = nPercentH
        Else
          nPercent = nPercentW
        End If

        Dim destWidth As Integer = CInt(sourceWidth * nPercent)
        Dim destHeight As Integer = CInt(sourceHeight * nPercent)

        Dim b As New Bitmap(destWidth, destHeight)
        Dim g As Graphics = Graphics.FromImage(DirectCast(b, Image))
        g.InterpolationMode = InterpolationMode.HighQualityBicubic

        g.DrawImage(imgToResize, 0, 0, destWidth, destHeight)
        g.Dispose()

        Return DirectCast(b, Image)
      End Function

     

    Depois no Botão Salvar:

     

      Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click

        Dim tamanho As New Size(240, 200)
        Dim imagemRedimensionada As Image
        imagemRedimensionada = resizeImage(PictureBox1.Image, tamanho)

        Dim saveBrowser As New SaveFileDialog
        saveBrowser.Filter = "(*.jpg)|*.jpg"

        saveBrowser.ShowDialog()
        If Not saveBrowser.FileName.Equals(String.Empty) Then
          imagemRedimensionada.Save(saveBrowser.FileName, Imaging.ImageFormat.Jpeg)
        End If
      End Sub


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    www.maestrodotnet.com.br
    terça-feira, 2 de novembro de 2010 04:06

Todas as Respostas

  • Fiz um exemplo pra você que ficou assim:

    - Variável Global para armazenar o caminho da Imagem que foi carregada:

      Private caminhoArquivo As IO.FileInfo

    - Click do Botão Abrir Imagem:

      Private Sub btnAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAbrir.Click
        Dim fileDialog As New OpenFileDialog
        fileDialog.ShowDialog()
        If Not fileDialog.FileName.Equals(String.Empty) Then
          caminhoArquivo = New IO.FileInfo(fileDialog.FileName)
          PictureBox1.Image = New Bitmap(caminhoArquivo.FullName)
        End If
      End Sub

    - Método que Redimensiona a Imagem:

     Private Function resizeImage(ByVal imgToResize As Image, ByVal size As Size) As Image
        Dim sourceWidth As Integer = imgToResize.Width
        Dim sourceHeight As Integer = imgToResize.Height

        Dim nPercent As Single = 0
        Dim nPercentW As Single = 0
        Dim nPercentH As Single = 0

        nPercentW = (CSng(size.Width) / CSng(sourceWidth))
        nPercentH = (CSng(size.Height) / CSng(sourceHeight))

        If nPercentH < nPercentW Then
          nPercent = nPercentH
        Else
          nPercent = nPercentW
        End If

        Dim destWidth As Integer = CInt(sourceWidth * nPercent)
        Dim destHeight As Integer = CInt(sourceHeight * nPercent)

        Dim b As New Bitmap(destWidth, destHeight)
        Dim g As Graphics = Graphics.FromImage(DirectCast(b, Image))
        g.InterpolationMode = InterpolationMode.HighQualityBicubic

        g.DrawImage(imgToResize, 0, 0, destWidth, destHeight)
        g.Dispose()

        Return DirectCast(b, Image)
      End Function

    - E o Botão que Salva a Imagem:

      Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click

        Dim tamanho As New Size(240, 200)
        Dim imagemRedimensionada As Image
        imagemRedimensionada = resizeImage(PictureBox1.Image, tamanho)

        Dim saveBrowser As New SaveFileDialog
        saveBrowser.Filter = "(*.jpg)|*.jpg"
        saveBrowser.FileName = caminhoArquivo.Name.Replace(caminhoArquivo.Extension, String.Empty)
        saveBrowser.ShowDialog()
        If Not saveBrowser.FileName.Equals(String.Empty) AndAlso caminhoArquivo IsNot Nothing Then
          imagemRedimensionada.Save(saveBrowser.FileName, Imaging.ImageFormat.Jpeg)
          caminhoArquivo = Nothing
        End If
      End Sub

    Fiz dessa forma só para te dar a idéia de como fazer, você pode ajustar da forma que precisar usar. Espero que seja isso.


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    sábado, 30 de outubro de 2010 05:09
  • não tem alguma forma + simples p\ fazer isso ?

    eu usei o método save (picturebox.image.save()), e ele redimencionou a imagem, mas ñ consigo salvar o que tem dentro dele, ele salva um arquivo em branco.

    não tem como ?

    domingo, 31 de outubro de 2010 03:17
  • Pra salvar redimensionando não.
    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    domingo, 31 de outubro de 2010 03:18
  • pq eu vi assim:

    Como você está preenchendo a imagem? Por acaso você desenha direto no Canvas do PictureBox? Se for, tente o seguinte:
    
      using(Bitmap bmp = new Bitmap(pictureBox.Width, pictureBox.Height))
      {
      pictureBox.DrawToBitmap(bmp, pictureBox.Bounds);
      bmp.Save("Nome do arquivo");
      }
    
    
    

    e assim:

    path = "C:\teste.jpg"
    Dim img = New Bitmap(picImagem.Image)
    img.Save(path,System.Drawing.Imaging.ImageFormat.Jpeg)
    

     

    domingo, 31 de outubro de 2010 06:11
  • Mas funcionou? Da forma que postei funciona e acho que ficou bem simples.
    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    domingo, 31 de outubro de 2010 18:41
  • então funcionou +/-

    ñ consegui implementar direito nenhum

    domingo, 31 de outubro de 2010 18:44
  • alguem ?

     

    E como que eu faço p\ salvar oq está dentro de uma picture box ?

    Independente se o q eu coloquei lá veio de um arquivo ou ñ

    terça-feira, 2 de novembro de 2010 03:53
  • Independente do que tem no PictureBox voce tem que colocar esse método:

     Private Function resizeImage(ByVal imgToResize As Image, ByVal size As Size) As Image
        Dim sourceWidth As Integer = imgToResize.Width
        Dim sourceHeight As Integer = imgToResize.Height

        Dim nPercent As Single = 0
        Dim nPercentW As Single = 0
        Dim nPercentH As Single = 0

        nPercentW = (CSng(size.Width) / CSng(sourceWidth))
        nPercentH = (CSng(size.Height) / CSng(sourceHeight))

        If nPercentH < nPercentW Then
          nPercent = nPercentH
        Else
          nPercent = nPercentW
        End If

        Dim destWidth As Integer = CInt(sourceWidth * nPercent)
        Dim destHeight As Integer = CInt(sourceHeight * nPercent)

        Dim b As New Bitmap(destWidth, destHeight)
        Dim g As Graphics = Graphics.FromImage(DirectCast(b, Image))
        g.InterpolationMode = InterpolationMode.HighQualityBicubic

        g.DrawImage(imgToResize, 0, 0, destWidth, destHeight)
        g.Dispose()

        Return DirectCast(b, Image)
      End Function

     

    Depois no Botão Salvar:

     

      Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click

        Dim tamanho As New Size(240, 200)
        Dim imagemRedimensionada As Image
        imagemRedimensionada = resizeImage(PictureBox1.Image, tamanho)

        Dim saveBrowser As New SaveFileDialog
        saveBrowser.Filter = "(*.jpg)|*.jpg"

        saveBrowser.ShowDialog()
        If Not saveBrowser.FileName.Equals(String.Empty) Then
          imagemRedimensionada.Save(saveBrowser.FileName, Imaging.ImageFormat.Jpeg)
        End If
      End Sub


    Bruno Ferreira de Souza
    Analista Desenvolvedor .NET
    MCP - Windows Form
    www.maestrodotnet.com.br
    terça-feira, 2 de novembro de 2010 04:06
  • eu vou tentar aqui
    terça-feira, 2 de novembro de 2010 04:08