Ich arbeite an einem persönlichen Projekt, das ein einzelnes Bild aus einem Raster von Bildern erstellt. Es dauert eine Weile, um das Bild zu erzeugen, und es wird nicht jedes Mal aktualisiert, wenn der Code erst ausgeführt wird. Wie kann die Schnittstelle beim Erzeugen des Bildes noch funktionsfähig (nicht gesperrt) werden?WPF-Bildgenerierung mit einem N × N Raster von Bildern
So starten: Ich habe ein N x N Raster von Bezeichnern, basierend auf der Kennung zeichne ich ein bestimmtes Bild bei (x, y) mit einer gegebenen skalierten Höhe und Breite.
Dieses Bild wird bei jeder Iteration neu generiert und muss auf dem WPF aktualisiert werden. Es ist auch an die ImageSource des Bildes auf der XAML-Seite
gebunden Mein Problem ist "Wie verbessere ich die Leistung der Generierung dieses großen Bildes" und "Wie aktualisiere ich das Bild so oft wie ich muss (per Generation).
for (int i = 0; i < numberOfIterations; i++)
{
// Do Some Work
UpdateImage();
}
...
BitmapImage imgFlower = new BitmapImage(new Uri(@"Images\Flower.bmp", UriKind.Relative));
BitmapImage imgPuppy = new BitmapImage(new Uri(@"Images\Puppy.bmp", UriKind.Relative));
ImageSource GeneratedImage{ get{ GenerateImage(); } set; }
...
void UpdateImage() { OnPropertyChanged("GeneratedImage"); }
...
ImageSource GenerateImage()
{
RenderTargetBitmap bmp = new RenderTargetBitmap(223, 223, 96, 96, PixelFormats.Pbgra32);
DrawingVisual drawingVisual = new DrawingVisual();
using (DrawingContext drawingContext = drawingVisual.RenderOpen())
{
double scaleRatio = CalculateScaleRatio();
DrawGridOfImages(drawingContext, scaleRatio);
}
bmp.Render(drawingVisual);
return bmp;
}
...
DrawGridOfImages(...)
{
double x,y;
for (int r = 0; r < NumberOfRows; r++)
{
x = r * scaleRatio;
for (int c = 0; c < NumberOfColumns; c++)
{
y = c * scaleRatio;
switch (imageOccupancy[r, c])
{
case Flower: drawingContext.DrawImage(imgFlower, new Rect(x,y,scaleRatio,scaleRation));
case Puppy: drawingContext.DrawImage(imgPuppy, new Rect(x,y,scaleRatio,scaleRatio));
}
}
}
}
Suche nach etwas wie BackgroundWorker WPF Beispiel. Z.B. dieser - http://www.tanguay.info/web/index.php?pg=codeExamples&id=232 –