none
A generic error occurred in GDI+ | Redimensionamento de Imagens RRS feed

  • Pergunta

  • Boa noite a todos, andei pesquisando pela internet sobre um erro que estou tendo em um projeto, porém não encontrei nada que soluciona-se meu problema, segue abaixo o código que estou usando para remimensionamento de imagens (exemplo que encontrei aqui no forum também):

      public void btnUpload_Click(object sender, EventArgs e)
    
      {
    
       if (FileUpload1.HasFile)
    
       {
    
        SalvarRedimencionarFoto(FileUpload1.PostedFile, @"C:\Documents and Settings\caio.santanna\Meus documentos\caio\Projeto Web Site\Intranet - Lelis\Redimensionamento\Thumbnails\", 100, 100, FileUpload1.FileName);
    
        //a generic error ocurred in GDI+
    
        //Redimensionamento(FileUpload1.PostedFile, @"C:\Redimensionamento\"
    
        //, 100, 100, FileUpload1.FileName);
    
       }
    
      }
    
      
    
      public static void SalvarRedimencionarFoto(HttpPostedFile ImagemOriginal, string DiretorioDestino, int Largura, int Altura, string Nome)
    
      {
    
       int vLargura, vAltura;
    
       string vExtensao;
    
       Image vImagemOriginal = null;
    
       Image vImagemFinal;
    
    
    
       try
    
       {
    
        vImagemOriginal = Image.FromStream(ImagemOriginal.InputStream);
    
    
    
        //Calculo para manter imagem em proporção sem perca de qualidade
    
        if ((vImagemOriginal.Width / Largura) > (vImagemOriginal.Height / Altura))
    
        {
    
         vLargura = Largura;
    
         vAltura = (int)(vImagemOriginal.Height * ((float)Largura / (float)vImagemOriginal.Width));
    
    
    
         if (vAltura > Altura)
    
         {
    
          vLargura = vLargura * (Largura / Altura);
    
          vAltura = Altura;
    
         }
    
        }
    
        else
    
        {
    
         vAltura = Altura;
    
    
    
         vLargura = (int)(vImagemOriginal.Width * ((float)Altura / (float)vImagemOriginal.Height));
    
    
    
         if (vLargura > Largura)
    
         {
    
          vAltura = vAltura * (Largura / vLargura);
    
          vLargura = Largura;
    
         }
    
        }
    
    
    
        //Objeto vImagemFinal recebe vImagemOriginal
    
        vImagemFinal = new Bitmap(vImagemOriginal);
    
    
    
        //Redimensiona o tamanho da imagem
    
        vImagemFinal = vImagemFinal.GetThumbnailImage(vLargura, vAltura, null, System.IntPtr.Zero);
    
    
    
        // Cria o do objeto
    
        try
    
        {
    
         vExtensao = System.IO.Path.GetExtension(ImagemOriginal.FileName).ToLower();
    
    
    
         //Salvando Imagem Redimensionada
    
         vImagemFinal.Save(String.Format("{0}{1}{2}", DiretorioDestino, Nome, vExtensao), ImageFormat.Jpeg);
    
         
    
        }
    
        catch (Exception e)
    
        {
    
         System.Windows.Forms.MessageBox.Show(e.Message);
    
        }
    
       }
    
       catch (Exception e)
    
       {
    
        System.Windows.Forms.MessageBox.Show(e.Message);
    
       }
    
      }
    
    
    O codigo a principio funciona perfeitamente, o problema é que comecei a customiza-lo e alterei primeiramente o endereço onde as imagens seriam salvas (segundo parametro do SalvarRedimencionarFoto), quando uso o endereço completo o código funciona, porém preciso usar o endereço partindo das pastas onde meu projeto se encontra e é ai que obtenho o erro "A generic error occurred in GDI+". Alguem saberia me informar o porque deste erro estar ocorrendo? Desde já agradeço.
    quarta-feira, 26 de maio de 2010 22:24

Respostas

  • Caio, blza?

    Já tive este mesmo erro, e identifiquei no código passado acima que você pode ter problemas com imagens que sejam menores do que o tamanho que você precisa tranformar, ex. 100x100. Peguei uma imagem 90x90 por exemplo, e tive o mesmo problema. Este erro do .Net ocorre pois o GDI espera os valores dos pixels inteiros. Se voce passar para o parâmetro o valor por exemplo, 99,99, irá retornar o mesmo erro. Segue a sintaxe:

    Public Function GetThumbnailImage(ByVal thumbWidth As

    Integer, ByVal thumbHeight As Integer, ByVal callback As System.Drawing.Image.GetThumbnailImageAbort, ByVal callbackData As System.IntPtr) As System.Drawing.Image

    Member of

    System.Drawing.Image

    Summary:

    Returns a thumbnail for this System.Drawing.Image.

    Parameters:

    thumbWidth

    : The width, in pixels, of the requested thumbnail image.

    thumbHeight

    : The height, in pixels, of the requested thumbnail image.

    callback

    : A System.Drawing.Image.GetThumbnailImageAbort delegate. In GDI+ version 1.0, the delegate is not used. Even so, you must create a delegate and pass a reference to that delegate in this parameter.

    callbackData

    : Must be System.IntPtr.Zero.

    Return Values:

    An System.Drawing.Image that represents the thumbnail.

     

     

    Espero ter ajudado!

    • Sugerido como Resposta Harley Araujo terça-feira, 1 de junho de 2010 17:31
    • Marcado como Resposta Harley Araujo quarta-feira, 11 de abril de 2012 13:26
    terça-feira, 1 de junho de 2010 13:13