Je travaille sur un projet personnel qui crée une image unique à partir d'une grille d'images. Il faut un certain temps pour générer l'image et ne rafraîchit pas chaque fois que le code est exécuté. Comment peut-on rendre l'interface encore fonctionnelle (non verrouillée) lors de la génération de l'image. Donc, pour commencer: J'ai une grille d'identifiants N x N, basée sur l'identifiant que je dessine une image spécifique en (x, y) avec une hauteur et une largeur données.Génération d'image WPF à l'aide d'une grille d'images N x N
Cette image est régénérée à chaque itération et doit être mise à jour sur le WPF. Il est également lié à ImageSource de l'image du côté xaml
Mon problème est «Comment améliorer les performances de génération de cette grande image» et «Comment actualiser l'image autant de fois que nécessaire (par génération).
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));
}
}
}
}
Recherchez quelque chose comme l'exemple BackgroundWorker WPF. Par exemple. celui-ci - http://www.tanguay.info/web/index.php?pg=codeExamples&id=232 –