Image 컨트롤에 연결된 Windows Phone 8 응용 프로그램에 WriteableBitmap
이 있습니다. 나는 이미지의 각 행을 반복하고 한 번에 비동기 적으로 픽셀 행을 페인팅 한 다음 페인팅을 위해 다음 행을 예약합니다. 그러나 기본 픽셀 데이터를 변경해도 컨트롤이 업데이트되지 않도록 속성이 변경되지는 않습니다. 이미지 소스를 동일한 픽셀에서 작성된 새로운 WriteableBitmap으로 설정하면 이미지가 잘 업데이트되지만 과도한 배열 복사가 많이 발생합니다.WriteableBitmap 픽셀의 변경 내용이 화면을 업데이트하지 않습니다.
void PaintImage(object state)
{
// get my height, width, row, etc. from the state
int[] bitmapData = new int[width];
// load the data for the row into the bitmap
Dispatcher.BeginInvoke(() =>
{
var bitmap = ImagePanel.Source as WriteableBitmap;
Array.Copy(bitmapData, 0, bitmap.Pixels, row * width, bitmapData.Length);
if (row < height - 1)
{
var newState = ... // create new state
ThreadPool.QueueUserWorkItem(PaintImage, newState);
}
});
}
나는 위의 Array.Copy 후이 라인을 추가 할 경우, 비트 맵은 점진적으로 화면에 그려집니다 (실제로는 단지 비트 맵마다 대체하고 있지만) :
var newBitmap = new WriteableBitmap(width, height);
Array.Copy(bitmap.Pixels, newBitmap.Pixels, newBitmap.Pixels.Length);
ImagePanel.Source = newBitmap;
그것은 것 같다를 WriteableBitmap 수동으로 일부 속성 변경 알림을 발생시켜 이미지가있는 알림이 필요합니다. ViewModel의 WriteableBitmap에 이미지를 바인딩하면이 문제가 사라질 것입니다.
당신이 전체를 교체 한 후 도면을 완성하고 전체 그림을 위해 기다릴 수 없어 더러운 사각형을 추가 새로운 업데이트 된 그림이있는 imageSource? – robertk
아니, 그게 내가 원하는 기능이 아니야. – sohum
그런 다음 가장 쉬운 방법은 아마 그것을 VM에 바인딩하고 그림을 새로 고칠 때마다 RaisePropertyChanged()를 수행하는 것입니다. – robertk