0

RGBA イメージを含むネイティブ char* バッファがあります。問題は、Windows スタイルの ARGB ではなく、実際の RGBA 形式であることです。(BGRAの略、後方)

オブジェクトは、コピーせずにバッファから作成する必要があります。

BitmapSource::Create Method (Int32, Int32, Double, Double, PixelFormat, BitmapPalette, IntPtr, Int32, Int32) System BitmapSource:: Drawing::Bitmap を試しました、残念ながら、ウィンドウの ARGB 形式のみをサポートしているようで、「通常の」RGBA はサポートしていません。

ここでDeleteObject(BitmapSource ^ )、使用しているバッファを解放する関数が必要です。オブジェクトの使用後に呼び出す必要があります。
Bitmap を使用すると、非常に簡単です。

void DeleteObject(Bitmap^ bmp)
{
    if (bmp == nullptr) 
    {
        return;
    }
    Rectangle rect(0, 0, bmp->Width, bmp->Height);
    System::Drawing::Imaging::BitmapData^ bmpData =
        bmp->LockBits(rect, System::Drawing::Imaging::ImageLockMode::ReadWrite,
        bmp->PixelFormat);

    delete [] (char*) bmpData->Scan0->ToPointer();

    bmp->UnlockBits(bmpData);
    bmp->~Bitmap();
}

BitmapSource (または RGBA を使用する他のもの) で同様のことをしたいと思います。

BitmapSourceバッファを安全に解放するにはどうすればよいですか?
の基になるバッファを取得するにはどうすればよいBitmapSourceですか?

RGBA バッファー (Windows スタイルの ARGB ではなく、実際の RGBA) を使用して表示できる他の C# オブジェクトを使用してもかまいません。

4

0 に答える 0