2012-01-29 2 views
1

WritebleBitmap 클래스를 사용하여 비트 맵에 캔버스를 추가 한 다음 비트 맵을 사용하여 SaveFileDilogue를 통해 클라이언트 시스템에 이미지를 저장하려고했습니다. 나는 FluxJpegCore 이미지 인코딩 방법을 사용하고있다. 래스터 배열을 사용하여 이미지를 픽셀 단위로 생성한다. 다음은 작업을 수행하는 코드의 일부입니다. "[I] = 새로운 바이트 [폭, 높이] 래스터 「나 이미지를 확대하고 인쇄 할 때Canvas에서 silverlight 이미지 인쇄

 byte[][,] raster = new byte[bands][,]; 

     for (int i = 0; i < bands; i++) 
     { 
      raster[i] = new byte[width, height]; 
     } 

     for (int row = 0; row < height; row++) 
     { 
      for (int column = 0; column < width; column++) 
      { 
       int pixel = bitmap.Pixels[width * row + column]; 
       raster[0][column, row] = (byte)(pixel >> 16); 
       raster[1][column, row] = (byte)(pixel >> 8); 
       raster[2][column, row] = (byte)pixel; 
      } 
     }  

모든 화상 저장 괜찮 간다, 그러나, 코드 라인에서 실패한다. 시스템의 메모리 부족 오류가 발생합니다. 누구든지이 솔루션을 찾을 수 있도록 도와 줄 수 있습니까?

+0

너비와 높이 값이 잘못되었을 때? – AnthonyWJones

+0

값은 width = "3687"이고 높이 = "44278" –

답변

0

@AnthonyWJones와 함께 가기 너비 나 높이가 double.NAN과 같은지 확신합니다. 너비와 높이가 실제 값인지를 확인하는 것을 확인하십시오. 또한 배열이 Silverlight 내에서 가능하지 않은지 확인하십시오.

+0

아니요 NAN이 아닌 경우 –

2

해결 방법이 확실하지 않습니다. 연속적으로 163MB의 메모리 블록이 필요한 배열이 3 개 있습니다. 문제는 프로세스가 그 크기 인 3 개의 주소 블록을 사용할 수 없다는 것입니다.

bitmap.Pixels은 653MB 크기의 배열이됩니다.

  1. 이, 희망 VM 조각이 제한됩니다 응용 프로그램의 OOB를 사용하여 같은 매우 큰 배열을 할당 할 수 있도록

    귀하의 유일한 희망 (들) 일 것이다.

  2. FluxJpegCore 대신 바이트 배열의 Stream를 사용할 수있는 경우 등 effeciently 실버 5까지
  3. 이동 (여전히 많은 작업 당신이 할 용) 및 64 비트 브라우저 인스턴스에서 응용 프로그램을 호스트 않습니다.
+0

안녕하세요 Anthony. 도와 주셔서 감사합니다! 큰 이미지를 인쇄 할 수있는 다른 방법이 있습니까? 거기에 큰 이미지 콘텐츠가있는 scrollviewer 있습니다. 나는 그것을 stackpanel로 변환 한 다음 같은 writeablebitmap을 생성한다. 이 프로세스는 메모리 오류 만 제공합니다. –