public Bitmap ConvertToBitmap(string filePath) { using (var texture = Texture.FromFile(device, filePath)) { var surfaceDescription = texture.GetLevelDescription(0); var textureWidth = surfaceDescription.Width; var textureHeight = surfaceDescription.Height; using (var renderTarget = Surface.CreateRenderTarget(device, textureWidth, textureHeight, Format.X8R8G8B8, MultisampleType.None, 0, true)) { var oldBackBuffer = device.GetRenderTarget(0); device.SetRenderTarget(0, renderTarget); using (var sprite = new Sprite(device)) { device.BeginScene(); sprite.Begin(SpriteFlags.AlphaBlend); sprite.Draw(texture, new ColorBGRA(Vector4.One)); sprite.End(); device.EndScene(); } device.SetRenderTarget(0, oldBackBuffer); var renderTargetData = renderTarget.LockRectangle(LockFlags.ReadOnly); var resultBitmap = new Bitmap(textureWidth, textureHeight); var resultData = resultBitmap.LockBits(new Rectangle(0, 0, textureWidth, textureHeight), ImageLockMode.WriteOnly, PixelFormat.Format32bppRgb); for (var y = 0; y < textureHeight; y++) { Utilities.CopyMemory(resultData.Scan0 + y * resultData.Stride, renderTargetData.DataPointer + y * renderTargetData.Pitch, textureWidth * 4); } resultBitmap.UnlockBits(resultData); renderTarget.UnlockRectangle(); return resultBitmap; } } }
public void RenderAll() { _Device.BeginScene(); _Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.White, 1.0f, 0); _Effect.SetValue("vec_Offset", new Vector4(Transform.X, Transform.Y, 0, 0)); _Effect.SetValue("f_Scale", Transform.Scale); _Effect.Begin(); _Effect.BeginPass(0); if (OnRender != null) { OnRender(); } _Effect.EndPass(); _Effect.End(); _Sprite.Begin(); //_Font.DrawText(_Sprite, "Hello World!", 300, 300, new RawColorBGRA(0, 0, 0, 255)); _Sprite.End(); _Device.EndScene(); _Device.Present(); }
public void drawAwsomee() { sprite.Begin(); sprite.Draw(suprise, new ColorBGRA(255, 255, 255, 255), null, new Vector3(-200, -20, 0)); sprite.End(); }
private void drawSprite() { if (texture == null) { return; } sprite.Transform = spriteTransform; sprite.Begin(D3D9.SpriteFlags.AlphaBlend); sprite.Draw(texture, new RawColorBGRA(255, 255, 255, 255)); sprite.End(); }
static void DrawKappa() { if (i == 360) { i = 0; } var IAngle = i * (Math.PI / 180); var Sin = (float)Math.Sin(IAngle); var Cos = (float)Math.Cos(IAngle); sprite.Begin(); sprite.Draw(kappa, new ColorBGRA(255, 255, 255, 255), null, new Vector3(-450 + 200 * Cos, 0 + 200 * Sin, 0)); sprite.End(); i += 5; }
static void DrawTaco() { if (i == 360) { i = 0; } var IAngle = i * (Math.PI / 180); var Sin = (float)Math.Sin(IAngle); var Cos = (float)Math.Cos(IAngle); sprite.Begin(); sprite.Draw(taco, new ColorBGRA(255, 255, 255, 255), null, new Vector3(-450 + 200 * Cos, 0 + 200 * Sin, 0)); sprite.End(); i += 5; // Utility.DelayAction.Add(15, () => DrawTaco()); }
static void DrawTexture(SharpDX.Direct3D9.Device device) { SharpDX.Direct3D9.Texture tex = null; Sprite sprite = null; tex = SharpDX.Direct3D9.Texture.FromFile(device, "Resources/fire_seamless_tile_by_suicidecrew.jpg"); sprite = new SharpDX.Direct3D9.Sprite(device); // to resize/rotate/position sprite.Transform = some 4x4 affine transform matrix (SharpDX.Matrix) sprite.Begin(SharpDX.Direct3D9.SpriteFlags.None); SharpDX.Vector3 pos = new SharpDX.Vector3(0, 0, 0); SharpDX.Color color = new SharpDX.ColorBGRA(0xffffffff); sprite.Draw(tex, color, new SharpDX.Mathematics.Interop.RawRectangle(1, 1, 100, 100), null, pos); // Finish drawing sprite.End(); }
public void DrawTexture(SharpDX.Direct3D9.Device device) { Sprite sprite = null; sprite = new SharpDX.Direct3D9.Sprite(device); // to resize/rotate/position sprite.Transform = some 4x4 affine transform matrix (SharpDX.Matrix) sprite.Begin(SharpDX.Direct3D9.SpriteFlags.None); SharpDX.Color color = new SharpDX.ColorBGRA(0xffffffff); if (isIn) { sprite.Draw(texIn, color, rectangle, null, pos); } else { sprite.Draw(texOut, color, rectangle, null, pos); } // Finish drawing sprite.End(); }
public void DrawOverlay(Texture targetTexture) { Subtitle currentSubtitle; lock (_syncObj) { currentSubtitle = _subtitles.ToList().FirstOrDefault(s => s.ShouldDraw); if (currentSubtitle == null) return; if (targetTexture == null || targetTexture.IsDisposed || currentSubtitle.SubTexture == null || currentSubtitle.SubTexture.IsDisposed) { if (_drawCount > 0) ServiceRegistration.Get<ILogger>().Debug("Draw count for last sub: {0}", _drawCount); _drawCount = 0; return; } _drawCount++; } try { // TemporaryRenderTarget changes RenderTarget to texture and restores settings when done (Dispose) using (new TemporaryRenderTarget(targetTexture)) using (TemporaryRenderState temporaryRenderState = new TemporaryRenderState()) using (Sprite sprite = new Sprite(_device)) { sprite.Begin(SpriteFlags.AlphaBlend); // No alpha test here, allow all values temporaryRenderState.SetTemporaryRenderState(RenderState.AlphaTestEnable, 0); // Use the SourceAlpha channel and InverseSourceAlpha for destination temporaryRenderState.SetTemporaryRenderState(RenderState.BlendOperation, (int)BlendOperation.Add); temporaryRenderState.SetTemporaryRenderState(RenderState.SourceBlend, (int)Blend.SourceAlpha); temporaryRenderState.SetTemporaryRenderState(RenderState.DestinationBlend, (int)Blend.InverseSourceAlpha); // Check the target texture dimensions and adjust scaling and translation SurfaceDescription desc = targetTexture.GetLevelDescription(0); Matrix transform = Matrix.Identity; // Position subtitle and scale it to match video frame size, if required transform *= Matrix.Translation(currentSubtitle.HorizontalPosition, currentSubtitle.FirstScanLine, 0); if (currentSubtitle.ScreenWidth != desc.Width || currentSubtitle.ScreenHeight != desc.Height) { var factorW = (float)desc.Width / currentSubtitle.ScreenWidth; var factorH = (float)desc.Height / currentSubtitle.ScreenHeight; transform *= Matrix.Scaling(factorW, factorH, 1); } sprite.Transform = transform; sprite.Draw(currentSubtitle.SubTexture, SharpDX.Color.White); sprite.End(); } if (_onTextureInvalidated != null) _onTextureInvalidated(); } catch (Exception ex) { ServiceRegistration.Get<ILogger>().Debug("Error in DrawOverlay", ex); } }
public void DrawOverlay(Surface targetSurface) { Texture subTexture; Subtitle currentSubtitle; lock (_syncObj) { currentSubtitle = _currentSubtitle; subTexture = _subTexture; // Available sub is not due if (currentSubtitle == null || !currentSubtitle.ShouldDraw) return; if (targetSurface == null || targetSurface.IsDisposed || subTexture == null) { if (_drawCount > 0) ServiceRegistration.Get<ILogger>().Debug("Draw count for last sub: {0}", _drawCount); _drawCount = 0; return; } _drawCount++; } try { if (!subTexture.IsDisposed) { // TemporaryRenderTarget changes RenderTarget to texture and restores settings when done (Dispose) using (new TemporaryRenderTarget(targetSurface)) using (TemporaryRenderState temporaryRenderState = new TemporaryRenderState()) using (Sprite sprite = new Sprite(_device)) { sprite.Begin(SpriteFlags.AlphaBlend); // No alpha test here, allow all values temporaryRenderState.SetTemporaryRenderState(RenderState.AlphaTestEnable, 0); // Use the SourceAlpha channel and InverseSourceAlpha for destination temporaryRenderState.SetTemporaryRenderState(RenderState.BlendOperation, (int) BlendOperation.Add); temporaryRenderState.SetTemporaryRenderState(RenderState.SourceBlend, (int) Blend.SourceAlpha); temporaryRenderState.SetTemporaryRenderState(RenderState.DestinationBlend, (int) Blend.InverseSourceAlpha); // Check the target texture dimensions and adjust scaling and translation SurfaceDescription desc = targetSurface.Description; Matrix transform = Matrix.Identity; transform *= Matrix.Translation(currentSubtitle.HorizontalPosition, currentSubtitle.FirstScanLine, 0); // Subtitle could be smaller for 16:9 anamorphic video (subtitle width: 720, video texture: 1024) // then we need to scale the subtitle width also. if (currentSubtitle.ScreenWidth != desc.Width) transform *= Matrix.Scaling((float) desc.Width / currentSubtitle.ScreenWidth, 1, 1); sprite.Transform = transform; sprite.Draw(subTexture, SharpDX.Color.White); sprite.End(); } } } catch (Exception ex) { ServiceRegistration.Get<ILogger>().Debug("Error in DrawOverlay", ex); } if (_onTextureInvalidated != null) _onTextureInvalidated(); }