나는 이미지 격자에서 하나의 이미지를 만드는 개인 프로젝트를 작업 중입니다. 이미지를 생성하는 데 시간이 걸리고 코드가 실행 된 후에 만 매번 새로 고치지 않습니다. 어떻게 이미지를 생성 할 때 인터페이스가 여전히 작동하도록 (잠기지 않고) 만들 수 있습니까?Nx N 격자의 이미지를 사용하는 WPF 이미지 생성
시작하려면 식별자에 따라 N x N 격자의 표가 있습니다. 지정된 확대/축소 된 높이와 너비로 (x, y)에 특정 이미지를 그립니다.
이 이미지는 각 반복을 재생성하므로 WPF에서 업데이트해야합니다. 또한 xaml 이미지의 ImageSource에 바인딩됩니다.
문제점 : '이 큰 이미지 생성의 성능을 향상시키는 방법'및 '필요한만큼 이미지를 새로 고치는 방법 세대).
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));
}
}
}
}
BackgroundWorker WPF 예제와 같은 것을 검색하십시오. 예 : 이 하나 - http://www.tanguay.info/web/index.php?pg=codeExamples&id=232 –