2014-07-21 4 views
1

이미 SO, AForge, FreeImage 및 몇 개의 다른 웹 사이트에서 제공된 모든 제안을 검색하여 시도했지만 이미지를 실제 8bpp로 변환 할 수 없습니다. 난 항상 JPEG 내가이실제 8bpp Jpeg로 변환

myImage.Save("image.jpg"); 

처럼 저장할 때 그래서 나는 3MB + 얻을, (myImage.RawFormat에 따라)를 MemoryBMP이있는 그레이 스케일 변환 한 후 대신 8

의 24bpp로 저장하세요 이미지 (그래서 내가 BMP에 저장되어 있다고 가정) 윈도우 8bpp입니다 (하지만 그것을 JPEG로해야합니다)라고합니다. 나는이

myImage.Save("image_JPEG.jpg", ImageFormat.Jpeg); 

처럼 저장하지만 나는 400KB의 이미지를 얻을 (그래서는 JPEG에 저장있어 가정)하지만 24bpp에서입니다.

어떤 아이디어가 원인 일 수 있습니까?

EDIT

JYelton 이것이 Image.Save() 방법의 한계 인 한, 그래서이 FreeImage 라이브러리로 이미지를 저장하는 변경 같이 FreeImage.SaveBitmap()는 매력처럼 작동한다.

+1

왜 JPG가 8 비트가 필요합니까? 참고로, 어떤 사람들은 각 채널 (R, G, B)이 8 비트를 갖는 이미지를 "8 비트 JPG"라고합니다. 그게 니가 한 일이라면 니가 그걸 가지고 있다고 생각해. 채널당 8 비트는 24 비트 컬러를 생성합니다. – BlueMonkMN

+0

Image.Save (문자열) 오버로드의 기본 이미지 형식은 BMP가 아닌 PNG입니다. –

답변

0

업데이트 :Image.Save() 메서드는 JPEG 형식의 픽셀 당 8 비트를 지원하지 않습니다. 아래 설명에 언급 된대로 FreeImage library 대신 사용할 수 있습니다. 만약 픽셀 당 8 비트 색 깊이를 줄이려면


은 전형적으로는 각 컬러 채널로 시작하는 픽셀 당 8 비트를 갖는 경우, 그레이 스케일 24 비트 컬러로 변환과 동일하다.

ImageCodecInfo[] availableCodecs = ImageCodecInfo.GetImageEncoders(); 
ImageCodecInfo jpgCodec = availableCodecs.FirstOrDefault(codec => codec.MimeType == "image/jpeg"); 
if (jpgCodec == null) 
    throw new NotSupportedException("Encoder for JPEG not found."); 

EncoderParameters encoderParams = new EncoderParameters(1); 
encoderParams.Param[0] = new EncoderParameter(Encoder.ColorDepth, 8L); 

myImage.Save("image_JPEG.jpg", jpgCodec, encoderParams); 
: Image.Save()를 사용하고 ImageFormat.Jpeg 지정할 때 일부 매개 변수를 인코더를 지정하고 제공해야하므로,

24 BPP를 기본 인코더입니다 (즉, 1. 색상 정보의 3 개 채널을 감소)

이것은 더 자세한 설명에서 수정 된 예입니다 (aspnet-answers.com에서 발견됨).

+0

EncoderParameters를 사용해 보았지만 아무런 차이가 없었습니다. 2 저장 : myImage.Save ("image_JPEG.jpg", ImageFormat.Jpeg); and myImage.Save ("image_JPEG.jpg", jpgCodec, encoderParams); 그리고 afet은 이진 파일 비교를 수행했으며 두 파일은 완전히 동일했습니다. –

+0

TIFF 형식의 ColorDepth를 지정하기 위해 EncoderParameters를 시도했지만 올바르게 작동하지만 Jpeg에는 차이가 없습니다. –

+0

관련 질문에 [의견]이 있습니다 (http://stackoverflow.com/questions/14479130/converting-8-bit-grayscale-tiff-image-to-8bit-grayscale-jpg-in-net-2- 0 # comment20529430_14679450) 8bpp가 Image.Save에 의해 지원되지 않는다는 것을 알려주며, 나는 그것을 알지 못했다. 좀 더 조사가 필요합니다. – JYelton

관련 문제