Sobrescrever um arquivo de imagem (bitmap)
Pergunta
Olá eu estou tentando salvar uma imagem de bitmap em um programa básico de edição de imagem.
Aqui está o código:
// then save it
ImageBoxInApp.Image.Save(filename);
[EDIT] E eu estou abrindo a imagem com este
openFileDialog1.Title = "Select an Image";
openFileDialog1.Filter = "All Files|*.*|Windows Bitmaps|*.bmp|JPEG Files|*.jpg";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
filename = openFileDialog1.FileName;
Image img = System.Drawing.Image.FromFile(filename);
Então, quando eu tento isso eu receber uma Generic GDI+ error
. Então, eu encontrei um solução para isso e parece que isso:
// Delete existing file first
System.IO.File.Delete(filename);
// then save it
ImageBoxInApp.Image.Save(filename);
Mas quando eu tento fazer isso eu recebo outro erro dizendo que o arquivo que estou apagando é aberto no momento. Isto é porque que é o arquivo que estou tentando editar.
Como faço para "fechar" o arquivo sem realmente fechar o aplicativo? Ou há uma solução alternativa?
Obrigado!
Solução
É difícil dizer sem ver algum contexto em torno de como o carregamento do arquivo, mas aqui estão algumas sugestões:
- Antes de salvar, copiar a imagem existente em uma nova imagem, perto do original, executar a excluir e salvar a cópia.
- Salve o arquivo para um nome de arquivo aleatório, exclua o original, renomeie o arquivo de nome aleatório para o nome original.
- Coloque o arquivo em um fluxo de memória e usar o em cópia de memória para inicializar a imagem.
Eu pessoalmente ir com a opção # 3 para a maioria dos casos. Certifique-se de eliminar a imagem quando você terminar de usá-lo -., É melhor se você pode envolvê-lo em um bloco usando ()