우리는 유형 6 OJPEG 압축 된 일부 TIFF 이미지를 보았습니다. 많은 이미지는 "8 8 8"의 BitsPerSample과 같으며 잘 작동합니다.Libtiff - 다른 BitsPerSample - 유효하거나 버그가있는 tiff 태그?
그러나 지금은 BitsPerSample 값이 "8 25608 0"인 것을 보았습니다. 이것이 가능한지 그리고 TIFF를 생성 한 시스템의 버그인지 여부는 궁금합니다. 가능하다면 BitsPerSample이 "8 8 8"이되도록 태그를 수정하여 잠재적으로 수정 될 수 있습니까?
현재 압축되지 않은 TIFF로 변환하여 처리 할 수있는 도구 (LEAD)가 하나뿐입니다. 분명히이 방법이 무엇인지 알지 못하며 아주 작은 문제를 해결하기위한 큰 오버 헤드가 있습니다. 소수의 이미지.
누구나이 문제에 직면 해 있거나 간단하지 않거나 수정하기가 복잡하다는 점에 관해서 나보다 많은 지식을 가진 사람이 있습니까? 지금까지 Libtiff.net 코드에서 파고 들기위한 내 시도가별로 성과가 없었습니다!
건배
UPDATE :이 같은 간단한와 litiff.net 사용 : (! 분명히 예외 처리를 생략)에
static void Main(string[] args)
{
using (Tiff image = Tiff.Open(args[0], "r"))
{
FieldValue[] value = image.GetField(TiffTag.IMAGEWIDTH);
int width = value[0].ToInt();
Console.WriteLine(string.Format("Width = {0}", width));
}
}
결과 :
ReadDirectory : 경고, 10. TIF : 알 수없는 태그 33000 (0x80e8)이있는 필드 10.TIF : 필드 "BitsPerSample"에 대해 다른 샘플 당 값을 처리 할 수 없음
처리되지 않은 예외 : System.NullReferenceException : 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. C에서 tifftest.Program.Main (문자열 []에 인수)에서 : \ tiffstuff \ tifftest \ tifftest \ Program.cs : 선 (15) 분할 오류 지금 검사를 생략하고 8을 가정을 얻고있다
다음 나는 분명히 OJPEG의 경고를
using (Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb))
{
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpdata = bmp.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
byte[] bits = new byte[bmpdata.Stride * bmpdata.Height];
for (int y = 0; y < bmp.Height; y++)
{
int rasterOffset = y * bmp.Width;
int bitsOffset = (bmp.Height - y - 1) * bmpdata.Stride;
for (int x = 0; x < bmp.Width; x++)
{
int rgba = raster[rasterOffset++];
bits[bitsOffset++] = (byte)((rgba >> 16) & 0xff);
bits[bitsOffset++] = (byte)((rgba >> 8) & 0xff);
bits[bitsOffset++] = (byte)(rgba & 0xff);
}
}
System.Runtime.InteropServices.Marshal.Copy(bits, 0, bmpdata.Scan0, bits.Length);
bmp.UnlockBits(bmpdata);
bmp.Save("c:\\tiffstuff\\TiffTo24BitBitmap.bmp");
}
과 : OJPEGReadHeaderInfoSecTablesQTable : 누락 된 JPEG 테이블을 "BitsPerSample는"그러나 나는 이제 bitmiracle 사이트의 예를 사용하여 BMP로 저장하여 이미지를 추출하기 위해 노력하고있어
결과 이미지는 단지 100 % 녹색입니다.
이 문제를 해결하기에는 너무 먼 곳에 있습니다. 나는 JPEG가 어딘가에 있다는 것을 안다. 그리고 그것을 성공적으로 압축 해제하는 것처럼 보이지 않을 것이다 :-(
컬러 또는 회색조 이미지로 작업하고 있습니까? 그냥 추측하지만, _SamplesPerPixel_가 1로 설정되면, 나는 "8"이 될 1 개의 값을 읽을 필요가 있다고 생각합니다. 그레이 스케일 이미지의 경우입니다. 컬러 이미지는 픽셀 당 3 개의 샘플 (RGB)을 사용하며 각 채널에 대해 "8"이 필요합니다. 이미지에 대해 무엇을하고 있으며 실패한 부분의 코드를 보여줄 수 있습니까? –
그들은 RGB 이미지입니다. 몇 가지 기본 코드로 원래 질문을 업데이트했습니다. 문제를 해결하려면 BitsPerSample 태그를 "8 8 8"로 변경하면 파일을 열어서 테스트 할 수 없습니다. 성공적으로 열면 JPEG로 저장하려고합니다. – Simon