문제

Visual Studio 2008에서 작업하고 있습니다. PNG 이미지를 그리고 해당 이미지를 다시 저장하려고합니다.

다음을 수행합니다.

private Image img = Image.FromFile("file.png");
private Graphics newGraphics;

그리고 생성자에서 :

newGraphics = Graphics.FromImage(img);

솔루션을 구축하면 오류가 없습니다. 내가 그것을 실행하려고 할 때, 나는 이것을 얻는다 :

인덱스 된 픽셀 형식이있는 이미지에서 그래픽 객체를 만들 수 없습니다.

C#에서 이미지를 사용한 경험이 많지 않습니다. 이것이 무엇을 의미하며 어떻게 치료할 수 있습니까?

편집 : 디버깅을 통해 Visual Studio는 이미지에 이미지에 format8bppindexed 픽셀 형식.

그래픽 클래스를 사용할 수 없다면 무엇을 사용합니까?

edit2 : 읽은 후 이것, GDI+로 작업 할 때 JPG 파일을 더 잘 고수한다고 가정하는 것이 안전하다고 생각합니다.

edit3 : 사용 진료 :

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
도움이 되었습니까?

해결책

인덱스 된 PNG를 지원하는 더 나은 PNG 라이브러리가 없으면 GDI+ 그래픽 객체가 인덱스 된 이미지를 지원하지 않기 때문에 해당 이미지를 그리려고 운이 좋지 않습니다.

인덱스 된 PNG를 사용할 필요가 없다면 해당 오류를 잡고 입력을 제 3 자 유틸리티를 사용하여 일반 RGB PNG로 변환 할 수 있습니다.

편집하다:

이 링크를 찾았습니다 http://fci-h.blogspot.com/2008/02/c-indexed-fixel-problem.html 이는 이미지를 그리는 방법을 제공하지만 원본에는 영향을 미치지 않으며 필요한 경우 저장할 수있는 사본 만 영향을 미치지 않습니다.

링크가 다운 된 경우 :

Bitmap bm = (Bitmap) System.Drawing.Image.FromFile("Fci-h.jpg",true);
Bitmap tmp=new Bitmap (bm.Width ,bm.Height );
Graphics grPhoto = Graphics.FromImage(tmp);
grPhoto.DrawImage(bm, new Rectangle(0, 0, tmp.Width , tmp.Height ), 0, 0, tmp.Width , tmp.Height , GraphicsUnit.Pixel);

다른 팁

인덱스 된 이미지 형식 (PNG, GIF, ...)에서 그래픽을 만들 수 없습니다. 비트 맵을 사용해야합니다 (파일 또는 이미지를 비트 맵으로 변환).

Image img = Image.FromFile("file.png");
img = new Bitmap(img);
newGraphics = Graphics.FromImage(img);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top