そんなわけでですね。
MDXで読み込んだらすべからくMicrosoft.DirectX.Direct3D.Textureになるわけですよ。
Formあぷりけーそんなので、これを描画するには一工夫必要する必要があるわけですよ。
HDC経由でBitbltが出来るよ!(・∀・)
っていう@ITで投稿をみたので、やってみようかなぁと思ったのですが、ヘルプを眺めてたらOnPaintのPaintEventArgs.GraphicsにDrawImageすればいいんじゃね? と思いまして、Textureをこねくりまわして、System.Drawing.Imageにすればいいのねーというわけで、またまたヘルプを眺めてたら、Texture側の出来ることは非常に少ないようで、Graphicsのプロパティ経由でなんかするか、HDCとるかなんか手法が限られてきます。
なんかもっと違う手法ないかのーとあれこれ見てたら、LockRectangleすればGraphicsStreamを返してくることを発見。
中身を見てみたら、Streamが親クラス。
これは! とおもって、System.Drawing.Bitmapのコンストラクタを見たらStreamを引数なのがあるので、それをやってみるかってことで、やってみたんですよ。
GraphicsStream stream = Texture.LockRectangle();
なんて書いて、streamはきちんと帰ってくるんだけど、それをBitmapのコンストラクタに食わせると、引数不正です。ぺっと例外を吐いてくれるわけです。
なんだとー! と思って、streamの中身を見てみたら、なんかサイズが0x7fffffffなんて数字です。
明らかにおかしくて、LockRectangleの引数を変えてみても一緒。
しょうがないからTextureからSurfaceを引っ張り出して、LockRectangleをしても一緒。
えーえーえー(´Д`)
と悩んだあげくに、MHFをやって一休憩。
むーん。
キリン変種にハットトリックを決めそうになったりもしましたが、まぁ、それはおいといてですね。
終わって、改めて考え直してみて、これはLockRectangleがおかしいということにして、違う方法を模索することにします。
TextureLoader.LoadFromFileでTextureを読み込んでいるわけでして、そいつの引数になんかないだろうかとヘルプをみてみたら、SaveToStreamなんてメソッドを発見。
Loaderなのに! とか思ったのはナイショですが、まぁ、これを試してみることに。
GraphicsStream stream = TextureLoader.SaveToStream( ImageFileFormat.Bmp, image_info.TextureImage );
Bitmap bitmap = new Bitmap( stream );
e.Graphics.DrawImage( bitmap, new Point( 0, 0) );
こんな感じでやってみたら動きました。
きちんとでるじゃーん。
なんというか、こんなくだらんことに、どんだけ無駄な時間かけたとおもってるんだよ(´Д`)
あーでもαがどうなってるかみてないな。
みないとー。
しかし、ぐぐってもLockRectangleってでてこないってことは、みんな使ってないって事ですかw