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 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(); }
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(); }
/// <summary> /// Draws the sprite based on a sprite-sheet at the given position, method must be called inside a BeginScene ... /// EndScene block. /// </summary> /// <param name="sprite">Sprite sheet</param> /// <param name="position">Position</param> public void Draw(SharpDX.Direct3D9.Sprite sprite, Vector2 position) { if (sprite == null) { return; } var matrix = sprite.Transform; var nMatrix = (Matrix.Scaling(Scale.X, Scale.Y, 0)) * Matrix.RotationZ(Rotation) * Matrix.Translation(position.X, position.Y, 0); sprite.Transform = nMatrix; sprite.Draw(Texture, Color); sprite.Transform = matrix; }
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 static void DrawSprite(Sprite sprite, Texture texture, Size size, Color color, Rectangle? spriteResize) { if (sprite != null && texture != null) { sprite.Draw(texture, color, spriteResize, new Vector3(size.Width, size.Height, 0)); } }
public static void DrawTransformedSprite(Sprite sprite, Texture texture, Rectangle spriteResize, Color color) { if (sprite != null && texture != null) { sprite.Draw(texture, color); } }
public static void DrawTransformSprite(Sprite sprite, Texture texture, Color color, Size size, float[] scale, float rotation, Rectangle? spriteResize) { if (sprite != null && texture != null) { Matrix matrix = sprite.Transform; Matrix nMatrix = Matrix.Scaling(scale[0], scale[1], 0) * Matrix.RotationZ(rotation) * Matrix.Translation(size.Width, size.Height, 0); sprite.Transform = nMatrix; sprite.Draw(texture, color); sprite.Transform = matrix; } }
public static void DrawSprite(Sprite sprite, Texture texture, Size size, Color color, float[] scale = null, float rotation = 0.0f) { if (sprite != null && !sprite.IsDisposed && texture != null && !texture.IsDisposed) { Matrix matrix = sprite.Transform; Matrix nMatrix = (scale != null ? Matrix.Scaling(scale[0], scale[1], 0) : Matrix.Scaling(1)) * Matrix.RotationZ(rotation) * Matrix.Translation(size.Width, size.Height, 0); sprite.Transform = nMatrix; Matrix mT = Drawing.Direct3DDevice.GetTransform(TransformState.World); if (Common.IsOnScreen(new Vector2(size.Width, size.Height))) sprite.Draw(texture, color); sprite.Transform = matrix; } }
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(); }