2011-02-04 11 views
7

Estoy representando docenas de imágenes en RenderTargetBitmap. Cada uno se representa en su propio Rect. Lo que quiero hacer es copiar una de estas áreas Rect renderizadas de la instancia RenderTargetBitmap en la misma área de WriteableBitmap ... Copiar rápidamente los píxeles rect o smth. como eso.¿Cómo se hace bitblit desde RenderTargetBitmap a WriteableBitmap?

Entonces, ¿hay alguna forma de copiar rect desde RenderTargetBitmap a WriteableBitmap de forma rápida?

Gracias de antemano.

Respuesta

3

Resuelto copiando toda la RenderTargetBitmap a WriteableBitmap así:

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