Julien237
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
19 janv. 2008 à 23:37
J'ai trouvé comment faire un rendu à partir de l'objet Video et du seul handle, ça fonctionne dans mon form, mais une fois transposé sur le handle du bureau, rien ne se dessine :'(...
Voilà toujours le code :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Microsoft.DirectX.AudioVideoPlayback;
using Microsoft.DirectX.Direct3D;
using Microsoft.DirectX;
namespace DrawOnDesktop
{
public partial class Form1 : Form
{
[DllImport("user32.dll")]
public static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll")]
public static extern bool InvalidateRect(IntPtr h, IntPtr r, bool b);
Device myDevice;
Video myVideo;
Texture myTexture;
CustomVertex.PositionTextured[] myVertices;
public Form1()
{
InitializeComponent();
myVideo = new Video("c:\\yop.avi", false);
PresentParameters param = new PresentParameters();
param.SwapEffect = SwapEffect.Discard;
param.Windowed = true;
myDevice = new Device(0, DeviceType.Hardware,
Handle, CreateFlags.SoftwareVertexProcessing,
param);
myDevice.Transform.Projection = Matrix.PerspectiveFovLH(
(float)Math.PI / 2, Width / Height, 0.1f, 100f);
myDevice.Transform.View = Matrix.LookAtLH(new Vector3(0f, 0f, -1f),
new Vector3(0f, 0f, 0f), new Vector3(0f, 1f, 0f));
myDevice.Transform.World = Matrix.Identity;
myVideo.RenderToTexture(myDevice);
myVideo.TextureReadyToRender += new TextureRenderEventHandler(myVideo_TextureReadyToRender);
myVertices = new CustomVertex.PositionTextured[4];
myVertices[0] = new CustomVertex.PositionTextured(-1f, 1f, 1f, 0f, 0f);
myVertices[1] = new CustomVertex.PositionTextured(1f, 1f, 1f, 1f, 0f);
myVertices[2] = new CustomVertex.PositionTextured(1f, -1f, 1f, 1f, 1f);
myVertices[3] = new CustomVertex.PositionTextured(-1f, -1f, 1f, 0f, 1f);
}
void myVideo_TextureReadyToRender(object sender, TextureRenderEventArgs e)
{
myTexture = e.Texture;
myDevice.Clear(ClearFlags.Target, Color.Black, 1.0f, 0);
myDevice.BeginScene();
if (myTexture != null)
{
myDevice.RenderState.CullMode = Cull.None;
myDevice.RenderState.Lighting = false;
myDevice.SetTexture(0, myTexture);
myDevice.VertexFormat = CustomVertex.PositionTextured.Format;
myDevice.DrawUserPrimitives(PrimitiveType.TriangleFan,
2, myVertices);
}
myDevice.EndScene();
myDevice.Present();
}
}
}
Sinon VLC, c'est pas OpenSource ?
Bonne chance
Julien.