读书人

directx截图的有关问题

发布时间: 2012-09-12 09:21:30 作者: rapoo

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); 

读书人网 >C#

热点推荐