2015-01-14 4 views
0

BitmapImage을 사용하여 이미지를 표시하려고하고 있습니다. 이미지가 변경되어 작동이 중지되었습니다.Silverlight에서 WriteableBitmap 및 BitmapImage를 사용하는 경우

Bitmapimage를 들어 나는이 코드를 사용되었다 :

      `ms.Seek(0, SeekOrigin.Begin); // ms is memory stream 
          BitmapImage b = new BitmapImage(); 
          b.SetSource(ms); 
          image.ImageSource = b;` 

나는 그것이 확인 된 코드의 조각으로 실행 한 경우 14400

if(bytes.length == 14400) 
    { 
    var bmp = new WriteableBitmap(width, height); 
    Buffer.BlockCopy(buffer, 0, bmp.Pixels, 0, buffer.Length); 
} 

내가 원하는 바이트 [] ==의 길이 WriteableBitmap 및 BitmapImage를 사용하는시기를 알아야합니다. iProgrammer 가입일

답변

2

:

비트 맵은 일반적으로 불변의 객체로서 구현된다. 이것이 의미하는 바는 일단 비트 맵을 만들면 변경할 수 없다는 것입니다. 새로운 버전을 만들면 비트 맵을 조작 할 수 있고 즉시 변경 될 수 있습니다.

WriteableBitmap은 이름에서 알 수 있듯이 변경 불가능하지 않으므로 개별 픽셀로 가져 와서 원하는만큼 조작 할 수 있습니다 . 이것은 동적 비트 맵이 필요할 때 작동하는 이상적인 방법입니다. MSDN에서 iProgrammer - WriteableBitmap

:

"업데이트하고 당 프레임으로 비트 맵을 렌더링 할 WriteableBitmap 클래스를 사용하여 ..."MSDN - WriteableBitmap Class

은 MSDN 문서의 예 섹션도 쇼 마우스 이벤트에 응답 할 때 WritableBitmap 이미지를 업데이트하는 방법 예제의 코드는 마우스의 오른쪽 버튼이 눌려져있을 때 픽셀의 ARGB 값을 0으로 설정하여 이미지의 픽셀을 지 웁니다. 이 코드는 마우스의 왼쪽 버튼이 눌린 이미지의 개별 픽셀을 업데이트하는 방법도 보여줍니다. 근본적으로이 코드는 기본 픽셀 이미지 편집기를 보여줍니다.

그러나 정규 비트 맵을 사용할 때 이미지 데이터를 변경할 수 없다는 점에 유의하십시오. 대신 WritableBitmap을 사용해야합니다. 그러나 원하는 경우 둘 다 렌더링 할 수 있습니다.

+0

비트 맵은 대답에서 변경 가능/불변입니다. 비트 맵을 만들 때 비트 맵을 변경할 수 있습니다. 변경할 수 없습니다. – user2526236