Pregunta

Estoy renderizando docenas de imágenes al RenderTargetBitMap. Cada uno se representa en su propio recto. Lo que quiero hacer es copiar una de estas áreas Rect renderizadas de la instancia de RendergetBitMap en la misma área del escritorio BitBitmap ... Copia rápida Rect Pixels o SMTH. como eso.

Entonces, ¿hay alguna forma de copiar Rect de RenderTargetBitMap a WriteableBitMap de una manera rápida?

¿Fue útil?

Solución

Resuelto copiando todo el RenderTargetBitMap a WriteableBitMap como este:

 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));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top