Bug geral no GDI+ [Corrigido]
Ao tentar modificar um objeto de bitmap, salvar ou carregar uma imagem em um servidor Web, você pode receber uma mensagem de erro Ocorreu um erro genérico no GDI+ . O erro pode ocorrer independentemente do aplicativo que está sendo usado. Esta postagem fornece as soluções mais aplicáveis que os usuários afetados podem aplicar para resolver o problema.
O que é GDI+?
O Windows GDI+ fornece gráficos vetoriais 2D, imagens e tipografia atuando como uma camada intermediária entre aplicativos e drivers de dispositivo para renderizar gráficos, imagens e texto 2D. O GDI+ melhora a interface de dispositivo gráfico do Windows (GDI) (interface de dispositivo gráfico incluída em versões anteriores do Windows) adicionando novos recursos e otimizando os existentes. Em outras palavras, GDI+ é o subsistema gráfico do Windows, que consiste em uma interface de programação de aplicativos (API) para exibir gráficos e rich text em uma tela de vídeo e em uma impressora.
Erro geral no GDI+
O erro geral gerado pelo erro GDI+ é muito geral porque a exceção não fornece detalhes. No entanto, se você estiver enfrentando esse problema, as sugestões abaixo devem ajudá-lo a resolver o problema, dependendo do seu cenário ou da tarefa que você concluiu.
1] Reinicie o ambiente de destino e repita a ação que você estava seguindo. Isso funcionou para usuários afetados que implantam ou movem aplicativos da adoção para a produção.
2] Este erro pode ocorrer devido à configuração de um “bloqueio” ao tentar salvar e substituir um bitmap modificado, pois ao inicializar um objeto Bitmap de uma imagem armazenada no disco rígido, ele cria um bloqueio no arquivo de imagem subjacente. Em outras palavras, quando um objeto Bitmap ou objeto Image é criado a partir de um arquivo, o arquivo permanece bloqueado pela duração do objeto. Como resultado, você não pode alterar a imagem e salvá-la no mesmo arquivo em que foi criada. Nesse caso, siga um destes procedimentos para resolver o problema:
- Em vez de substituir o arquivo, salve o novo arquivo com um nome diferente do arquivo original.
- Se você precisar substituir um arquivo existente, crie um bitmap separado do bitmap existente e descarte o bitmap antigo, que desbloqueará o arquivo de imagem. Agora você pode fazer as alterações necessárias no novo bitmap e salvá-lo com o nome do arquivo de imagem original.
- Salve em um fluxo de memória “intermediário”. O código
Memory /FileStream
vsbitmap.Save(...)
, embora contraintuitivo, deve funcionar com pequenas variações para explicar a chamada de qualquer método específico.
Observe que o bloqueio subjacente do arquivo só é liberado quando o objeto Bitmap é excluído – uma vez que o bloqueio é liberado, você pode sobrescrevê-lo.
3] Você precisa se livrar de suas imagens, porque se você confiar no coletor de lixo para encontrá-las a tempo e liberar recursos GDI não gerenciados, provavelmente receberá uma exceção. Além disso, ao escrever código, preste atenção aos seguintes pontos:
ConvertTo
Parece um desperdício, basta usá-lo se precisar.- Se você precisar concatenar caminhos, use
Path.Combine
. - Use a interpolação de strings em vez de adicionar strings.
- Se você precisar escapar de um caractere, como uma barra invertida, use Verbatim String Literal @”…”.
- Sempre favoreça
using
um operador que nunca se esqueça de descartar um objeto, mesmo que o código lance uma exceção.
4] Nenhuma permissão para gravar na pasta ao salvar o arquivo, especialmente se você receber um erro no site porque o site está sendo executado com permissões limitadas. Em um aplicativo da Web, o pool de aplicativos ou a conta que executa o site deve ter acesso de gravação à pasta na qual salvar o arquivo, portanto, certifique-se de que a pasta em que você está tentando salvar o arquivo seja gravável. Por exemplo, se você estiver usando o site com uma conta DefaultAppPool
, deverá conceder ao IIS AppPool\DefaultAppPool
usuário permissões de gravação na pasta.
5] Se você estiver usando o Azure e estiver recebendo um erro genérico no GDI+ ao abrir um bitmap apenas em um servidor Web remoto e não em sua máquina de teste local, o GDI+ poderá estar presente nos servidores IIS do Azure. não pode lidar com novos formatos BMP criados pelo GIMP. Em caso afirmativo, siga um destes procedimentos para resolver o problema:
- Salve novamente o BMP com Paint.
- Em vez disso, use um PNG descompactado.
- Salve como BMP de 24 bits com o GIMP. Este método dará má qualidade.
6] Esta mensagem de erro é exibida se o caminho para o qual você está navegando Bitmap.Save()
não for válido (a pasta não existe, etc.). Simplificando, você está escrevendo o caminho errado para salvar a imagem. Nesse caso, certifique-se de corrigir o caminho de salvamento e verifique se o caminho também inclui o nome do arquivo.
7] Se o arquivo bitmap já existia na unidade do sistema e seu aplicativo deu um erro, siga estas etapas:
- Verifique se a pasta de destino existe.
- Certifique-se de que a pasta de destino ainda não tenha um arquivo com esse nome.
- Verifique a permissão de sua pasta onde a imagem está salva em sua unidade local. Para fazer isso, clique com o botão direito do mouse na pasta e selecione Propriedades > Segurança > Editar > Adicionar – selecione Todos e marque a caixa Permitir controle total .
Como resolver o erro geral no GDI + em C #?
Se você estiver recebendo um erro geral no GDI+ em C#, pode ser porque o arquivo de bitmap que você está tentando salvar já existe na unidade do sistema. Nesse caso, você pode certificar-se de que a pasta de destino existe e que ainda não possui um arquivo com o mesmo nome.
O que é um erro GDI+?
O GDI+ gera um erro quando não consegue salvar arquivos, geralmente pelos dois motivos mais comuns. Uma razão é que quando você inicializa um objeto Bitmap de uma imagem armazenada no disco rígido, ele cria um bloqueio no arquivo de imagem subjacente. Devido ao bloqueio, quando você tenta salvar e substituir um bitmap modificado, esse erro é gerado.
Como corrigir janelas GDI?
Para corrigir o erro GDI+ Windows no seu dispositivo, verifique se as seguintes sugestões funcionam:
- Execute uma verificação SFC em um prompt de comando elevado.
- Execute o solucionador de problemas de energia.
- Atualize o driver da sua placa de vídeo.
- Verifique o Windows Update.
- Inicie o computador no modo de inicialização limpa.
O que é GDI no meu laptop?
O GDI permite que os desenvolvedores de aplicativos exibam informações em uma tela ou impressora sem se preocupar com os detalhes do dispositivo de exibição específico. O desenvolvedor do aplicativo chama os métodos fornecidos pelas classes GDI+ e esses métodos, por sua vez, fazem as chamadas apropriadas para drivers de dispositivo específicos. O GDI+ isola o aplicativo do hardware gráfico e é esse isolamento que permite aos desenvolvedores criar aplicativos independentes de dispositivo.
Windows ainda usando GDI?
Com o advento do Windows XP, o GDI foi preterido em favor de seu sucessor, o subsistema GDI+ baseado em C++. Embora o GDI+ esteja incluído no Windows XP e posterior, o GDI+ DLL também pode ser fornecido com um aplicativo e usado em versões anteriores do Windows.
Fonte: Clube do Windows
Deixe um comentário