Spout.NET est une implémentation C# .NET pour Spout2, un système de partage d'images vidéo pour Windows.
Vous pouvez installer Spout.NET à partir de NuGet.
Install-Package Spout.NET
Veuillez noter que Spout.NET
nécessite NuGet 3.3
ou supérieur (en d'autres termes, PackageReference
). Si votre projet utilise packages.config
, veuillez migrer vos packages vers PackageReference.
L'API de cette bibliothèque de mappage est entièrement cohérente avec le SDK Spout, vous pouvez donc vous référer à la documentation du SDK Spout pour le développement. Vous pouvez utiliser Marshal Class pour éviter le code dangereux.
Créez un projet de console .NET Framework.
Reciblez la configuration de build sur x64
.
Ajoutez les packages de nugets suivants.
Install-Package Spout.NET
Activez Allow Unsafe Code
dans la configuration du projet.
Mettez le code suivant dans Program.cs
.
using System ;
using System . IO ;
using System . Threading ;
using OpenGL ;
using Spout . Interop ;
namespace SpoutTest
{
class Program
{
static unsafe void Main ( string [ ] args )
{
using ( DeviceContext deviceContext = DeviceContext . Create ( ) ) // Create the DeviceContext
{
IntPtr glContext = IntPtr . Zero ;
glContext = deviceContext . CreateContext ( IntPtr . Zero ) ;
deviceContext . MakeCurrent ( glContext ) ; // Make this become the primary context
SpoutSender sender = new SpoutSender ( ) ;
sender . CreateSender ( "CsSender" , 640 , 360 , 0 ) ; // Create the sender
byte [ ] data = new byte [ 640 * 360 * 4 ] ;
int i = 0 ;
fixed ( byte * pData = data ) // Get the pointer of the byte array
while ( true )
{
for ( int j = 0 ; j < 640 * 360 * 4 ; j += 4 )
{
data [ j ] = i == 0 ? byte . MaxValue : byte . MinValue ;
data [ j + 1 ] = i == 1 ? byte . MaxValue : byte . MinValue ;
data [ j + 2 ] = i == 2 ? byte . MaxValue : byte . MinValue ;
data [ j + 3 ] = byte . MaxValue ;
}
Console . WriteLine ( $ "Sending (i = { i } )" ) ;
sender . SendImage (
pData , // Pixels
640 , // Width
360 , // Height
Gl . RGBA , // GL_RGBA
true , // B Invert
0 // Host FBO
) ;
Thread . Sleep ( 1000 ) ; // Delay
if ( i < 2 ) i ++ ;
else i = 0 ;
}
}
}
}
}
MIT