directx截图的问题
怎么我GetBackBuffer截出来的图是花的
[code=C#][/code]
private void button1_Click(object sender, EventArgs e)
         {
             Microsoft.DirectX.Direct3D.Device myDevice;
            PresentParameters presentParams = new PresentParameters();
             presentParams.Windowed = true;
             presentParams.AutoDepthStencilFormat = DepthFormat.D16;
           presentParams.SwapEffect = SwapEffect.Discard;
             presentParams.PresentFlag = PresentFlag.LockableBackBuffer;
           presentParams.BackBufferWidth = 1280;
            presentParams.BackBufferHeight = 800;
             presentParams.MultiSample = MultiSampleType.None;
           presentParams.BackBufferCount = 1;
             presentParams.DeviceWindowHandle = this.Handle;                               
                 myDevice = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);                
                 Surface mySurface = myDevice.GetBackBuffer(0, 0, Microsoft.DirectX.Direct3D.BackBufferType.Mono);
                 SurfaceLoader.Save("c:\\Screenshot.bmp", ImageFileFormat.Bmp, mySurface);
                     Microsoft.DirectX.GraphicsStream gStr = Microsoft.DirectX.Direct3D.SurfaceLoader.SaveToStream(ImageFileFormat.Bmp, mySurface);
                     pictureBox1.Image = Bitmap.FromStream(gStr);
                     Bitmap screen = new Bitmap(Bitmap.FromStream(gStr));
                     gStr.Dispose();
                     mySurface.Dispose();
                 }
------解决方案--------------------
C# code
            PresentParameters pp = new PresentParameters();
            pp.Windowed = true;
            pp.SwapEffect = SwapEffect.Discard;
            Device dv = new Device(0, DeviceType.Hardware, this, CreateFlags.HardwareVertexProcessing, pp);
            Surface sf = dv.CreateOffscreenPlainSurface(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Format.A8R8G8B8, Pool.SystemMemory);
            dv.GetFrontBufferData(0, sf);
            GraphicsStream gs = SurfaceLoader.SaveToStream(ImageFileFormat.Bmp, sf);
            pictureBox1.Image = Bitmap.FromStream(gs);