문제
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);