Frage

Ich habe einige Code, den ich irgendwo im Netz gefunden.

unsafe static Bitmap SaveFrame(IntPtr pFrame, int width, int height)
    {
        try
        {
            int x, y;
            int linesize = width * 3;
            byte* scan0 = (byte*)Marshal.ReadIntPtr(pFrame);

            IntPtr bufferPtr = Marshal.AllocHGlobal(linesize * height);
            byte* buffer = (byte*)bufferPtr;

            for (y = 0; y < height; y++)
            {
                for (x = 0; x < linesize; x = x + 3)
                {
                    *buffer++ = (byte)*(scan0 + y * linesize + x + 2);
                    *buffer++ = (byte)*(scan0 + y * linesize + x + 1);
                    *buffer++ = (byte)*(scan0 + y * linesize + x);
                }
            }
            Bitmap b = new Bitmap(width, height, linesize, System.Drawing.Imaging.PixelFormat.Format24bppRgb, bufferPtr);



            return b;
        }
        catch (Exception ex) { throw new Exception(ex.Message); }
    }

Das obige Code gibt mir eine gültige Bitmap, aber ich bin mit WPF und will es in einem Bitmap

sein

Ohne durch diesen Prozess zu gehen, Im den Code versuchen

byte[] ptr = ....
Marshal.Copy(pFrame, ptr , 0, ptr .Length);
BitmapImage aBitmapImage = new BitmapImage(); 
aBitmapImage.BeginInit();
aBitmapImage.StreamSource = new MemoryStream(ptr); //FLastImageMemStream;//
aBitmapImage.EndInit();

, die nicht ...

funktioniert

Ich habe auch versucht,

System.Windows.Media.Imaging.BitmapSource.Create(width, height, 96, 96,
    System.Windows.Media.PixelFormats.Rgb24, null, bufferPtr,linesize * height,
    width * 3 ));

, die auch mir nicht gibt ein Bild scheint es (nachdem es auf die Source-Eigenschaft von Bild Zuweisung)

Kann jemand geben mir irgendwelche Hinweise? Vielen Dank Alle

War es hilfreich?

Lösung

Laden die Daten direkt in die Bitmap hat nicht funktioniert, weil es Daten in einem Bilddateiformat erwartet, wie Sie in einer .bmp oder .png-Datei sehen würden. Sie versorgen Rohpixeldaten statt.

Ihre zweite Ansatz sieht aus wie es funktionieren sollte, hat aber einige unnötige Schritte zu. Der Code, den Sie gefunden wird Umschreiben der Pixeldaten von BGR24 zu RGB24, aber Sie sollten nur in der Lage sein, es als BGR24 in direkt zu laden:

System.Windows.Media.Imaging.BitmapSource.Create(width, height, 96, 96,
    System.Windows.Media.PixelFormats.Bgr24, null, pFrame, linesize * height,
    width * 3 ));

Wie auch immer, Sie haben keine Informationen darüber, warum es Ihnen ein Bild nicht zu geben? Haben Sie irgendwelche Ausnahmen erhalten, wenn die Erstellung der Bitmap? Hat es die falschen Farben oder falsche Größe geben? Sind Sie sicher, dass alle Quelldaten werden? Was halten Sie von den Eigenschaften des Bitmap sehen, nachdem Sie es schaffen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top