0

ネットのどこかで見つけたコードがあります。

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); }
    }

上記のコードは有効なビットマップを提供しますが、WPFを使用しており、BitmapImageに含める必要があります

このプロセスを経ずに、私はコードを試しています

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

動作しません...

私も試しました

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

これも私にそれが見える画像を与えません(それをImageのSourceプロパティに割り当てた後)

誰かが私に何かヒントを与えることができますか?ありがとうアレン

4

2 に答える 2

1

.bmp または .png ファイルで見られるように、データを画像ファイル形式で想定しているため、データを直接 BitmapImage にロードすることはできませんでした。代わりに生のピクセル データを提供しました。

2 番目のアプローチは機能するように見えますが、不要な手順がいくつかあります。あなたが見つけたコードは、ピクセル データを BGR24 から RGB24 に書き換えていますが、BGR24 として直接読み込むことができるはずです。

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

とにかく、画像が表示されない理由について詳しく教えてください。ビットマップの作成時に例外が発生しましたか? 間違った色や間違ったサイズを与えましたか? すべてのソース データがそこにあると確信していますか? 作成後、BitmapSource のプロパティには何が表示されますか?

于 2011-03-31T18:17:55.380 に答える
0

System.Drawing.Bitmap から WPF BitmapImage をロードする

于 2010-11-16T23:12:40.673 に答える