Próbuję skopiować część BitmapSource do WritableBitmap.Kopiowanie z BitmapSource do WritableBitmap
To jest mój kod do tej pory:
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();
otrzymuję „ArgumentException: Wartość nie mieści się w oczekiwanym zakresie.” w linii CopyPixels
.
Próbowałem zamieniać row.PixelHeight * row.BackBufferStride
z row.PixelHeight * row.PixelWidth
, ale potem pojawia się błąd informujący, że wartość jest zbyt niska.
Nie mogłem znaleźć jednego przykładu kodu, używając tego przeciążenia z CopyPixels
, więc proszę o pomoc.
Dzięki!
Dzięki! Miałem nadzieję, że będę mógł kopiować bezpośrednio z BitmapSource do WritableBitmap ... Teraz zastanawiam się, co tak naprawdę ma zrobić przeciążenie CopyPixels ... –
Przeciążenie prostokąta skopiuje obraz bitmapowy do Int32Rect, więc nie jest tak użyteczny przekaż to do WriteableBitmap. Jeśli chcesz czegoś naprawdę krótkiego i chcesz skopiować cały obraz: * WriteableBitmap target = new WriteableBitmap (Pic1.Source jako BitmapSource); Pic2.Source = target; * –
A jeśli chcę tylko część BitmapSource (potrzebuję prostokąta o stosunkowo małej wysokości i tej samej szerokości)? –