2011-02-04 12 views
7

RenderTargetBitmap'e düzinelerce görsel yapıyorum. Her biri kendi Rect içinde işlenir. Yapmak istediğim, RenderTargetBitmap örneğinden oluşturulan bu Rect alanlarından birini WriteableBitmap'in aynı alanına kopyalamaktır ... Hızlı kopya rect piksel veya smth. bunun gibi.RenderTargetBitmap'ten WriteableBitmap'e bitblit nasıl?

Rectro RenderTargetBitmap'tan WriteableBitmap'e hızlı bir şekilde kopyalamanın bir yolu var mı?

Şimdiden teşekkürler. Bütün RenderTargetBitmap kopyalayarak çözüldü

cevap

3

böyle WriteableBitmap için:

protected override void OnRender(DrawingContext drawingContext) 
{ 
    if (ActualWidth == 0 || ActualHeight == 0) return; 
    // Create destination bitmap 
    wb = new WriteableBitmap((int) ActualWidth, (int) ActualHeight, 96, 96, PixelFormats.Pbgra32, null); 
    wb.Lock(); 
    rtb = new RenderTargetBitmap(wb.PixelWidth, wb.PixelHeight, wb.DpiX, wb.DpiY, PixelFormats.Pbgra32); 
    foreach (MyVisual visual in visuals) 
    { 
    visual.Render(rtb); 
    } 

    rtb.CopyPixels(new Int32Rect(0,0, rtb.PixelWidth, rtb.PixelHeight), 
    wb.BackBuffer, 
    wb.BackBufferStride * wb.PixelHeight, wb.BackBufferStride); 

    wb.AddDirtyRect(new Int32Rect(0, 0, (int)ActualWidth, (int)ActualHeight)); 
    wb.Unlock(); 

    drawingContext.DrawImage(wb, new Rect(0, 0, ActualWidth, ActualHeight)); 
}