2014-01-10 3 views
0

이미지를 CameraCaptureTask과 함께 찍은 후 서버에 업로드해야합니다. 서버 측에 업로드 된 JPG가 올바른 파일 크기를 갖고있는 것처럼 보이지만 손상되었습니다. 또한 imageBuffer에는 0으로 설정된 모든 바이트가있는 것으로 보입니다. 아래 코드의 문제점은 무엇입니까?은색으로 업로드 할 때 JPG가 손상됩니다.

if (bitmapImage != null) { 
    // create WriteableBitmap object from captured BitmapImage 
    WriteableBitmap writeableBitmap = new WriteableBitmap(bitmapImage); 

    using (MemoryStream ms = new MemoryStream()) 
    { 
     writeableBitmap.SaveJpeg(ms, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 100); 

     imageBuffer = new byte[ms.Length]; 
     ms.Read(imageBuffer, 0, imageBuffer.Length); 
     ms.Dispose(); 
    }     
} 
+0

'SaveJpeg'는 스트림을 나중에 위치 0에 다시 배치합니까? 그렇지 않으면 스트림의 위치가 저장된 이미지 뒤에 * 없을 것입니까? –

답변

0

SaveJpeg 메서드는 스트림의 현재 위치를 변경합니다. 스트림의 내용을 올바르게 유지하려면 처음부터 읽어야합니다 (즉, 위치를 0으로 설정). 이것을 시도하십시오 :

if (bitmapImage != null) { 
    // create WriteableBitmap object from captured BitmapImage 
    WriteableBitmap writeableBitmap = new WriteableBitmap(bitmapImage); 

    using (MemoryStream ms = new MemoryStream()) 
    { 
     writeableBitmap.SaveJpeg(ms, writeableBitmap.PixelWidth, writeableBitmap.PixelHeight, 0, 100); 

     ms.Position = 0; 
     imageBuffer = new byte[ms.Length]; 
     ms.Read(imageBuffer, 0, imageBuffer.Length); 
     ms.Dispose(); 
    }     
} 
+0

완벽하게 작동합니다. 감사합니다! – user3153110

+0

변경 한 내용에 대한 텍스트 설명을 입력하여 추후에이 질문에 대한 방문자가 기본적으로 두 코드를 비교하여 한 코드의 작동 방식과 다른 코드의 차이점을 파악할 필요가 없도록하십시오. –

+1

ms.Position = 0으로 설정 한 후 올바르게 위치를 변경 한 스트림이 다시 작동하기 시작했습니다. – user3153110