0
这个想法是处理加载的图像。我首先想要以这种方式处理它,通过图像出现白色/黑色线条。 实际的问题是,一个新的线程(for Thread.Sleep)在处理时冻结了整个UI。当我尝试分派器时,图像不会更新。MVVM Writeablebitmap图像处理
于是我找来了ProcessingClass:
public WriteableBitmap GetProcessedPicture(int i)
{
WriteableBitmap wb = image.image;
Process(ref wb, i);
return wb;
}
private void Process(ref WriteableBitmap wb, int j)
{
int stride = wb.PixelWidth * (wb.Format.BitsPerPixel + 7)/8;
byte[] data = new byte[stride * wb.PixelHeight];
for (int i = 0; i < data.Length; i++) data[i] = 255;
//just to see some changes
wb.WritePixels(new Int32Rect(j, 0, 100, 100), data, stride, 0);
}
而且MainViewModel类(我使用MVVM光):
public void Start_Click()
{
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
for (int i = 0; i < 100; i++)
{
ImageSource = processingClass.GetProcessedPicture(i);
Thread.Sleep(100);
}
}));
};
感谢您的帮助。
是,'ImageSource'是Image.Source,但它接受'WriteableBitmap'是没有问题的,当我初始化它。 但我试过你的代码,它引发了同样的'InvalidOperationException',我得到了eralier。 – Matthias
您是否在UI线程上创建了WriteableBitmap?否则,可能会扩大你的'InvalidOperationException'。您可能还想阅读https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.writeablebitmap.aspx上的注释,以确保您在线程化时可以正确执行。 – ManIkWeet