画像へのポインターを作成して、テクスチャとして使用するにはどうすればよいですか?
コードは次のとおりです。
device.BeginScene();
sprite.Begin(SlimDX.Direct3D9.SpriteFlags.None);
var newImage = Image.FromStream(ms);
tx = SlimDX.Direct3D9.Texture.FromPointer((IntPtr)newImage);
form.Size = newImage.Size;
sprite.Draw(tx, Color.Transparent);
sprite.End();
device.EndScene();
device.Present();
ご想像のとおり、うまくいきません。しかし、私は画像から、または画像へのポインターを作成したいと考えています。後で画像変数を再利用する必要があるため、Texture.FromStream
一度しか使用できないため機能しません。
編集:
めちゃくちゃな画像:
device.BeginScene();
sprite.Begin(SlimDX.Direct3D9.SpriteFlags.None);
tx = SlimDX.Direct3D9.Texture.FromStream(device, ms, SlimDX.Direct3D9.Usage.None, SlimDX.Direct3D9.Pool.Managed);
sprite.Draw(tx, Color.Transparent);
sprite.End();
tx.Dispose();
device.EndScene();
device.Present();
しかし、テクスチャをこれに変更すると:
tx = SlimDX.Direct3D9.Texture.FromStream(device, ms, 0, 0, 0, SlimDX.Direct3D9.Usage.None, SlimDX.Direct3D9.Format.A8R8G8B8, SlimDX.Direct3D9.Pool.Managed, SlimDX.Direct3D9.Filter.None, SlimDX.Direct3D9.Filter.None, 0);
それは機能します(サイズを0に設定できることに気づきました。これはデフォルトを意味すると思います)。
しかし、ここで理解できないのはフォーマットです。何百もの異なるフォーマットがあります。GPU でどちらが最速かネイティブかはわかりません;S
もう1つ、テクスチャのサイズを取得するにはどうすればよいですか? フォームが変更された場合、テクスチャのサイズに合わせてフォームのサイズを変更したいので。
編集2:
0,0 サイズでは、テクスチャがウィンドウに引き伸ばされているようです;S