Ich versuche, mit System.Windows.Media.Imaging zwei Bitmaps derselben Größe und desselben Formats zu einer dritten Datei derselben Größe und desselben Formats zusammenzusetzen. Ich tue dies außerhalb des Kontextes von WPF (Arbeit an den Code in LINQPad), da die Absicht ist, dies in eine ASP.net-Anwendung als Alternative zu den nicht unterstützten System.Drawing.
// load the files
var layerOne = new BitmapImage(new Uri(layerOneFile, UriKind.Absolute));
var layerTwo = new BitmapImage(new Uri(layerTwoFile, UriKind.Absolute));
// create the destination based upon layer one
var composite = new WriteableBitmap(layerOne);
// copy the pixels from layer two on to the destination
int[] pixels = new int[(int)layerTwo.Width * (int)layerTwo.Height];
int stride = (int)(4 * layerTwo.Width);
layerTwo.CopyPixels(pixels, stride, 0);
composite.WritePixels(Int32Rect.Empty, pixels, stride, 0);
// encode the bitmap to the output file
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(composite));
using (var stream = new FileStream(outputFile, FileMode.Create))
{
encoder.Save(stream);
}
Dadurch wird eine Datei erstellt, die mit der von EbeneEins geladenen Datei identisch ist. Ich hatte erwartet, dass EbeneZwei über EbeneEins gelegt wird. Was zu geschehen scheint, ist die Daten in den BackBuffer geschrieben wurde, aber nie auf die Bitmap gerendert wird... vermutlich ist dies etwas, das der Dispatcher normalerweise tun würde.
Was mache ich falsch und wie kann ich wieder auf den richtigen Weg kommen?