0

ビットマップを作成し、そこからいくつかの変数を取り出して Texture2D を作成するアプリケーションを作成しようとしています。これは私が持っているものです:

public Bitmap getBitmap()
        {
            if (!panelVideoPreview.IsDisposed)
            {
                Bitmap b = new Bitmap(panelVideoPreview.Width, panelVideoPreview.Height, PixelFormat.Format32bppRgb);
                Graphics g = Graphics.FromImage(b);
                Rectangle videoRect = panelVideoPreview.Bounds;
                panelVideoPreview.DrawToBitmap(b, videoRect);
                b.Dispose();
                return b;
            }
            else
            {
                Bitmap b = new Bitmap(panelVideoPreview.Width, panelVideoPreview.Height);
                return b;
            }
        }

次に、それからテクスチャを作成しようとします。

        Texture2D tex = new Texture2D(gDevice, (int)bit.Width, (int)bit.Height);

ここでエラーが発生します。次のようになります。

System.ArgumentException が処理されませんでした Message=Parameter is not valid. Source=System.Drawing StackTrace: D:\Dropbox\School\Project FUN\Code\XNA\GPUParticles\ の GPUParticles.VelocityTexture.createVelocityMapBitmap(GraphicsDevice gDevice, Bitmap bit, Single Accuracy) の System.Drawing.Image.get_Width() でGPUParticles\GPUParticles\VelocityTexture.cs:D:\Dropbox\School\Project FUN\Code\XNA\GPUParticles\GPUParticles\GPUParticles\Game1.cs:line 302 の GPUParticles.Game1.camInterval_Tick(Object myObject, EventArgs myEventArgs) の 16 行目System.Windows.Forms.Timer.OnTick(EventArgs e) で System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m) で System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) システムで。

4

1 に答える 1

1

MemoryStream を使用できます。例 (未テスト):

Texture2D MakeTextureFromBitmap(Bitmap bmp) {
    using (var ms = new MemoryStream()) {
        bmp.Save(ms, ImageFormat.Png);
        return Texture2D.FromStream(GraphicsDevice, ms);
    }
}
于 2012-04-23T04:33:39.850 に答える