2011-02-04 18 views
7

Sto visualizzando dozzine di immagini su RenderTargetBitmap. Ciascuno è reso nel proprio Rect. Quello che voglio fare è copiare una di queste aree Rect renderizzate dall'istanza RenderTargetBitmap nella stessa area di WriteableBitmap ... Copia veloce di pixel retti o smth. come quello.Come bitblit da RenderTargetBitmap a WriteableBitmap?

Quindi, c'è un modo per copiare rect da RenderTargetBitmap a WriteableBitmap in modo veloce?

Grazie in anticipo.

risposta

3

risolto copiando l'intero RenderTargetBitmap a WriteableBitmap in questo modo:

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)); 
}