Estoy tratando de copiar una parte de un BitmapSource a un WritableBitmap.Copiando de BitmapSource a WritableBitmap
Este es mi código hasta ahora:
var bmp = image.Source as BitmapSource;
var row = new WriteableBitmap(bmp.PixelWidth, bottom - top, bmp.DpiX, bmp.DpiY, bmp.Format, bmp.Palette);
row.Lock();
bmp.CopyPixels(new Int32Rect(top, 0, bmp.PixelWidth, bottom - top), row.BackBuffer, row.PixelHeight * row.BackBufferStride, row.BackBufferStride);
row.AddDirtyRect(new Int32Rect(0, 0, row.PixelWidth, row.PixelHeight));
row.Unlock();
consigo "ArgumentException: Valor no está dentro del rango esperado." en la línea de CopyPixels
.
He intentado intercambiar row.PixelHeight * row.BackBufferStride
con row.PixelHeight * row.PixelWidth
, pero me sale un error diciendo que el valor es demasiado bajo.
No pude encontrar un solo ejemplo de código usando esta sobrecarga de CopyPixels
, entonces estoy pidiendo ayuda.
Gracias!
¡Gracias! Esperaba poder copiar directamente de BitmapSource a WritableBitmap ... Ahora me pregunto qué significa realmente esta sobrecarga de CopyPixels ... –
La sobrecarga de rectángulo copiará la imagen de mapa de bits a Int32Rect, por lo que no es tan útil para pasar eso a WriteableBitmap. Si quiere algo realmente corto y quiere copiar toda la imagen: * WriteableBitmap target = new WriteableBitmap (Pic1.Source como BitmapSource); Pic2.Source = target; * –
Y si solo quiero una parte de BitmapSource (¿necesito un rectángulo con una altura relativamente pequeña y el mismo ancho)? –