C#BITMAP BITMAPIMAGE BITMAPSOURCE
-
11-10-2019 - |
質問
ネット上のどこかで見つけたコードがいくつかあります。
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 ));
また、これは私に画像を与えません(画像のソースプロパティに割り当てた後)
誰かが私にヒントを与えることができますか?アレンに感謝します
解決
データをBitMapImageに直接読み込むことは、.bmpまたは.pngファイルに表示されるように、画像ファイル形式でデータを期待しているため、機能しませんでした。代わりに生のピクセルデータを提供しました。
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を作成した後、ビットマプシュースのプロパティについて何がわかりますか?
所属していません StackOverflow