2014-09-22 2 views
2

C를 I 이런 JPEG로 BMP 압축 :JPEG 신장 내 프로그램에서 #

그럼 함수 MemoryStream을 상기 JPEG를 수신
private void ConvertBmpToStreamJPG30(Bitmap b, Stream s) 
{ 
    s.Flush(); 
    EncoderParameters encoderParameters = new EncoderParameters(1); 
    encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 30L); 
    b.Save(s, GetEncoder(ImageFormat.Jpeg), encoderParameters); 
} 

는 I 비트 맵으로 변환

을 수행하여 나는 이미지를 표시 할 때

Bitmap b = new Bitmap(stream); 
, 라인의 많은이 같이있다 :

Screenshot

내가 뭘 잘못하고 있니?

편집 여기에 1 문제 보여주는 작은 비주얼 스튜디오 솔루션 : http://www.fast-files.com/getfile.aspx?file=79311

그것은 화면 공유 소프트웨어의 시작입니다. 기능 : 스크린 샷을 찍어 비교하고 차이를 압축하여 프로그램의 다른 부분으로 보내어 압축을 해제하고 수신 된 모든 이미지를 다시 구성합니다. 왼쪽에 "전송 된"내용과 오른쪽에 재구성 된 이미지를 표시하는 창을 엽니 다.

+1

이 (가) 손상된 데이터 스트림처럼 보입니다. 다른 앱에서 jpeg가 제대로 열리십니까? –

+1

문제를 보여주는 짧지 만 완전한 프로그램을 제작할 수 있습니까? 스트림을 디스크에 저장하면 탐색기 등으로 스트림을 열 수 있습니까? –

+0

왜 Save() 전에 플러시()를해야합니까? 스트림의 시작 부분에 s의 위치가 있습니까? –

답변

0

세 가지가 마음에 와서 :

  1. (30)보다 더 나은 품질을 설정하고이 도움이 있는지 확인하십시오;
  2. 하드웨어 문제에 대해 RAM (및 비디오 RAM, GDI +이 VGA를 압축에 사용할 수도 있음)을 확인하십시오.
  3. similar weird problem 일부 JPEG 파일을로드하고 조금 수정 한 다음 다시 저장했습니다. 그것은 예외를 낳았다. 해결책은 이전 비트 맵을 기반으로 새 비트 맵을 만들어 사본을 저장하는 것이 었습니다. 시도해 봐.
관련 문제