2009-09-08 2 views
3

Silverlight의 WriteableBitmap을 파일 시스템에 저장하는 방법은 무엇입니까?이 작업을하기 위해 FileStream을 사용하여 수행 할 작업이 확실하지 않습니다. 상업용 라이브러리가 필요하지 않은 한 비트 맵, PNG, JPEG 형식 등이 될 수 있습니다. .
가능합니까? 여기 Silverlight 3.0에서 SaveFileDialog를 사용하여 BitmapImage/WriteableBitmap을 저장하는 방법은 무엇입니까?

는 아래 SaveDialog에 내 전화입니다 :

Dim SaveDialog As New SaveFileDialog 
    If SaveDialog.ShowDialog Then 
     Try 
      Using FileStream As Stream = SaveDialog.OpenFile 
       ' Save Image File Code Here 
      End Using 
     Catch ex As Exception 

     End Try 
    End If 

편집

이, 난 그냥 거기에 그것을 저장 을 필요 내 XAML이 쓰고있는 그대로 WritableBitmap의

추가 언급 WriteableBitmap.Pixels 속성은 정수 픽셀의 1 차원 배열입니다.이 값을 파일 스트림에 넣을 수 있습니까? 그렇다면 어떻게 할 수 있습니까?

다음

그러나이 그것을 데이터와 결과 출력이 쓸모를 "bitmapify"하지 않습니다 작동하지만 내 이미지 스트림을 쓰고, 나는 파일에 픽셀 스트림을 씁니다이 몇 가지 예제 코드 나는 단지 이 비트 맵 파일 (또는 다른 것)이되도록 마크 업하는 방법을 알아야합니다. 이전에 JPEG 및 PNG 예제를 발견했지만 그 중 아무 것도 작동하는 방법을 잘 설명하지 못했습니다. PNGEncoding 메서드를 사용해야하므로 내 코드베이스에 통합됩니다. 그러나 거기에 간단한 BMP 파일 버전이 있습니까?

 Dim Image As Imaging.WriteableBitmap = _Style.Image 
     Dim Area As Integer = Image.PixelWidth * Image.PixelHeight 
     For Raster As Integer = 0 To Area - 1 
      Dim Pixel As Integer = Image.Pixels(Raster) 
      Dim Bytes() = BitConverter.GetBytes(Pixel And &HFF) 
      FileStream.Write(Bytes, 0, 4) 
     Next 
+0

+1, 정말 좋은 질문입니다. 이것이 BitmapImage에서 가져온 이유가 있습니까? – AnthonyWJones

+0

필자는 WritableBitmap을 의미했지만, 전자는 Silverlight에서 이미지를 저장해야하는 방식이라면 적용됩니다. 그러나 Silverlight에서 이미지를 저장하는 모든 방법을 사용할 수 있습니다. – RoguePlanetoid

답변

2

은 거기 밖으로 여러 오픈 소스 인코더가 있습니다

FJCore : http://code.google.com/p/fjcore/

조 Stegman의 PNG 인코더가 : http://blogs.msdn.com/jstegman/archive/2008/04/21/dynamic-image-generation-in-silverlight.aspx

FreeImage가 : http://freeimage.sourceforge.net/

당신은 어떤을 사용할 수 있습니다 다양한 형식을 인코딩하는 데 사용됩니다. 여기가 구운 것 일단 WriteableBitmap 저장에 대한 게시물입니다 :

http://community.irritatedvowel.com/blogs/pete_browns_blog/archive/2009/03/18/Silverlight-3-1320-The-Bitmap-API-2F00-WriteableBitmap.aspx

UPDATE : 을 더는 보안상의 문제로 SL3에 제한되는 파일에 WriteableBitmap 저장과 같은 검색 일부를 수행 한 후. 해결 방법이 있습니다 : 파일에 캔버스의 내용을 저장해야처럼

http://geekswithblogs.net/braulio/archive/2009/07/12/export-canvas-to-png-and-save-it-in-your-local.aspx

보인다. 샘플을 수정하여 JPEG 또는 다른 형식을 저장할 수 있어야합니다.

+0

IOW, 상당한 노력이 필요하며 그 중 많은 부분이 필요합니다. WritabelBitmap을 저장하는 해결책이 있다는 것을 아직 명확하게 밝히지 않았습니다. – AnthonyWJones

+0

그들은 쉽지 않습니다. SL3 RC에서 문제로 확인 된 일부 오래된 게시물을 수집하고 Microsoft는 RTW에서이를 해결하려고 "시도"하려고했습니다. 나는 그들이 확실한 답을 얻지 못했지만 그러한 지침이 없다면 나를 믿지 않을 것입니다. –

+0

FJCore 라이브러리를 사용하고 잘 작동했습니다. 플러스가 기본 형식이었습니다. 이미지에서 파일로 스트리밍하는 것이 가능합니다. 예를 들어 지저분한 경우에도 방법이있을 수 있습니다. 아마 Silverlight 4.0에서 더 좋을까요? – RoguePlanetoid

1

이전에 쓰기 가능 비트 맵, 저장 대화 상자 및 FJCore를 사용하여 비트 맵에 XAML을 저장하는 방법을 설명하는이 게시물을 작성했습니다.

http://blog.blueboxes.co.uk/2009/07/21/rendering-xaml-to-a-jpeg-using-silverlight-3/

+0

좋은 예입니다. 실제로이 코드를 사용하여 FJCore를 사용하기 위해 다른 이름으로 저장 코드를 만들고, 게시하는 것을 잊어 버렸습니다. 다른 사람들에게 도움이 될 수 있기 때문에 감사합니다. 또한 해당 코드를 VB로 변환하는 것이 매우 쉽습니다. 이것이 내가 필요로했던 나의 어플리케이션을 개발하기 위해 사용했던 것입니다. – RoguePlanetoid

관련 문제