GDI+의 일반 버그 [수정됨]
비트맵 개체를 수정하거나 웹 서버에 이미지를 저장하거나 업로드하려고 하면 GDI+에서 일반 오류가 발생했습니다 .라는 오류 메시지가 나타날 수 있습니다 . 사용 중인 응용 프로그램에 관계 없이 오류가 발생할 수 있습니다. 이 게시물은 영향을 받는 사용자가 문제를 해결하기 위해 적용할 수 있는 가장 적용 가능한 솔루션을 제공합니다.
GDI+가 무엇인가요?
Windows GDI+는 2D 그래픽, 이미지 및 텍스트를 렌더링하기 위한 응용 프로그램과 장치 드라이버 간의 중간 계층 역할을 하여 2D 벡터 그래픽, 이미지 및 타이포그래피를 제공합니다. GDI+는 새로운 기능을 추가하고 기존 기능을 최적화하여 Windows GDI(그래픽 장치 인터페이스) (이전 버전의 Windows에 포함된 그래픽 장치 인터페이스)를 개선합니다. 즉, GDI+는 비디오 디스플레이와 프린터 모두에 그래픽과 서식 있는 텍스트를 표시하기 위한 API(응용 프로그래밍 인터페이스)로 구성된 Windows 그래픽 하위 시스템입니다.
GDI+의 일반 오류
GDI+ 오류로 인해 발생하는 일반 오류는 예외가 세부 정보를 제공하지 않기 때문에 매우 일반적입니다. 그러나 이 문제에 직면한 경우 아래 제안 사항은 시나리오 또는 완료한 작업에 따라 문제를 해결하는 데 도움이 될 것입니다.
1] 대상 환경을 재부팅한 다음 따르던 작업을 반복합니다. 이는 적용에서 프로덕션으로 앱을 배포하거나 이동하는 영향을 받는 사용자에게 효과가 있었습니다.
2] 이 오류는 수정된 비트맵을 저장하고 덮어쓰려고 할 때 “잠금”을 설정하기 때문에 발생할 수 있습니다. 하드 드라이브에 저장된 이미지에서 비트맵 개체를 초기화할 때 기본 이미지 파일에 잠금이 생성되기 때문입니다. 즉, Bitmap 객체 또는 Image 객체가 파일에서 생성될 때 파일은 객체가 지속되는 동안 잠긴 상태로 유지됩니다. 결과적으로 이미지를 변경하고 이미지가 생성된 동일한 파일에 다시 저장할 수 없습니다. 이 경우 다음 중 하나를 수행하여 문제를 해결합니다.
- 파일을 덮어쓰는 대신 새 파일을 원본 파일과 다른 이름으로 저장하십시오.
- 기존 파일을 덮어써야 하는 경우 기존 비트맵에서 별도의 비트맵을 만든 다음 이전 비트맵을 삭제하면 이미지 파일의 잠금이 해제됩니다. 이제 새 비트맵을 필요한 대로 변경하고 새 비트맵을 원본 이미지 파일 이름으로 저장할 수 있습니다.
- “중간” 메모리 스트림에 저장합니다.
Memory /FileStream
vs 코드 는bitmap.Save(...)
직관적이지 않지만 특정 메서드 호출을 설명하기 위해 약간의 변형으로 작동해야 합니다.
파일의 기본 잠금은 Bitmap 개체가 삭제될 때만 해제됩니다. 잠금이 해제되면 덮어쓸 수 있습니다.
3] 이미지를 제거해야 합니다. 가비지 수집기에 의존하여 이미지를 제시간에 찾고 관리되지 않는 GDI 리소스를 해제하면 예외가 발생할 수 있기 때문입니다. 또한 코드를 작성할 때 다음 사항에 주의하십시오.
ConvertTo
낭비인 것 같으니 필요한 경우에만 사용하세요.- 경로를 연결해야 하는 경우
Path.Combine
. - 문자열을 함께 추가하는 대신 문자열 보간을 사용합니다.
- 백슬래시와 같은 문자를 이스케이프해야 하는 경우 Verbatim String Literal @”…”를 사용합니다.
using
코드에서 예외가 발생하더라도 항상 개체를 처리하는 것을 잊지 않는 연산자를 선호 합니다.
4] 파일을 저장할 때 폴더에 쓸 수 있는 권한이 없습니다. 특히 웹사이트가 제한된 권한으로 실행되기 때문에 웹사이트에서 오류가 발생하는 경우. 웹 응용 프로그램에서 웹 사이트를 실행하는 응용 프로그램 풀 또는 계정에는 파일을 저장할 폴더에 대한 쓰기 권한이 있어야 하므로 파일을 저장하려는 폴더가 쓰기 가능한지 확인하십시오. 예를 들어, 계정으로 웹사이트를 사용하는 경우 사용자에게 폴더에 대한 쓰기 권한을 부여 DefaultAppPool
해야 합니다.IIS AppPool\DefaultAppPool
5] Azure를 사용 중이고 로컬 테스트 시스템이 아닌 원격 웹 서버에서만 비트맵을 열 때 GDI+에서 일반 오류가 발생하는 경우 GDI+가 Azure IIS 서버에 있을 수 있습니다. 김프에서 만든 새 BMP 형식을 처리할 수 없습니다. 그렇다면 다음 중 하나를 수행하여 문제를 해결하십시오.
- 페인트로 BMP를 다시 저장합니다.
- 압축되지 않은 PNG를 대신 사용하십시오.
- 김프를 사용하여 24비트 BMP로 저장합니다. 이 방법은 품질이 떨어집니다.
6] 이 오류 메시지는 탐색 Bitmap.Save()
하려는 경로가 유효하지 않은 경우(폴더가 존재하지 않는 경우 등) 표시됩니다. 간단히 말해서, 이미지를 저장하기 위해 잘못된 경로를 쓰고 있습니다. 이 경우 저장 경로를 수정하고 경로에 파일 이름도 포함되어 있는지 확인하십시오.
7] 비트맵 파일이 시스템 드라이브에 이미 존재하고 응용 프로그램에서 오류가 발생한 경우 다음 단계를 따르십시오.
- 대상 폴더가 있는지 확인하십시오.
- 대상 폴더에 이미 해당 이름의 파일이 없는지 확인하십시오.
- 로컬 드라이브에서 이미지가 저장된 폴더의 권한을 확인하십시오. 이렇게 하려면 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 속성 > 보안 > 편집 > 추가 를 선택합니다. 모든 사람을 선택하고 모든 권한 허용 상자를 선택 합니다.
C#에서 GDI+의 일반 오류를 해결하는 방법은 무엇입니까?
C#의 GDI+에서 일반 오류가 발생하는 경우 저장하려는 비트맵 파일이 이미 시스템 드라이브에 있기 때문일 수 있습니다. 이 경우 대상 폴더가 존재하고 동일한 이름을 가진 파일이 아직 없는지 확인할 수 있습니다.
GDI+ 오류란 무엇입니까?
GDI+는 일반적으로 가장 일반적인 두 가지 이유로 파일을 저장할 수 없을 때 오류를 발생시킵니다. 한 가지 이유는 하드 드라이브에 저장된 이미지에서 Bitmap 개체를 초기화할 때 기본 이미지 파일에 잠금이 생성되기 때문입니다. 잠금 때문에 수정된 비트맵을 저장하고 덮어쓰려고 하면 이 오류가 발생합니다.
GDI 창을 수정하는 방법?
장치에서 GDI+ Windows 오류를 수정하려면 다음 제안 사항이 작동하는지 확인하십시오.
- 관리자 권한 명령 프롬프트에서 SFC 스캔을 실행합니다.
- 전원 문제 해결사를 실행합니다.
- 비디오 카드 드라이버를 업데이트하십시오.
- Windows 업데이트를 확인하십시오.
- 클린 부팅 모드에서 컴퓨터를 시작합니다.
내 노트북의 GDI란 무엇입니까?
GDI를 사용하면 응용 프로그램 개발자가 특정 디스플레이 장치의 세부 사항에 대해 걱정하지 않고 화면이나 프린터에 정보를 표시할 수 있습니다. 응용 프로그램 개발자는 GDI+ 클래스에서 제공하는 메서드를 호출하고 이러한 메서드는 차례로 특정 장치 드라이버를 적절하게 호출합니다. GDI+는 그래픽 하드웨어에서 응용 프로그램을 분리하며 개발자가 장치 독립적인 응용 프로그램을 만들 수 있도록 하는 것은 이러한 분리입니다.
Windows가 여전히 GDI를 사용하고 있습니까?
Windows XP의 도래와 함께 GDI는 더 이상 사용되지 않으며 C++ 기반 GDI+ 하위 시스템으로 대체되었습니다. GDI+는 Windows XP 이상에 포함되어 있지만 GDI+ DLL은 응용 프로그램과 함께 제공되어 이전 버전의 Windows에서 사용할 수도 있습니다.
출처: Windows 클럽
답글 남기기