/// <summary> /// Aktualisiert die Einstellungen. /// </summary> /// <param name="vmr9">Der zu verwendende Darstellungsfilter.</param> internal void Update(VMR vmr9) { // Be safe try { // Unmap using (var vmr = vmr9.MarshalToManaged()) { // Attach to interface var mixer = (IVMRMixerControl)vmr.Object; // Current values var values = VMRProcAmpControl.Create(VMRProcAmpControlFlags.Brightness | VMRProcAmpControlFlags.Contrast | VMRProcAmpControlFlags.Hue | VMRProcAmpControlFlags.Saturation); // Fill values.Brightness = Brightness.Value; values.Saturation = Saturation.Value; values.Contrast = Contrast.Value; values.Hue = Hue.Value; // Send update mixer.SetProcAmpControl(0, ref values); } } catch { // Ignore any error } }
/// <summary> /// Erzeugt die Anzeigekomponent des Graphen. /// </summary> private void CreateVMR() { // Test state var vmr = VMR; if (vmr != null) { return; } // Create the VMR vmr = VMR.Create(); try { // Add the VMR AddFilter(Filter_VMR, vmr); } catch { // Cleanup vmr.Dispose(); // Forward throw; } }
/// <summary> /// Deaktiviert die Bildüberlagerung. /// </summary> public void ClearOverlayBitmap() { // Create structure var param = new VMRAlphaBitmap { Flags = VMRAlphaBitmapFlags.Disable }; // Forward using (var vmr = VMR.MarshalToManaged()) ((IVMRMixerBitmap)vmr.Object).SetAlphaBitmap(ref param); }
/// <summary> /// Erzeugt eine neue Beschreibung. /// </summary> /// <param name="vmr9">Der zu verwendende Darstellungsfilter.</param> internal PictureParameters(VMR vmr9) { // Unmap using (var vmr = vmr9.MarshalToManaged()) { // Attach to interface var mixer = (IVMRMixerControl)vmr.Object; // Current values var values = VMRProcAmpControl.Create(VMRProcAmpControlFlags.Brightness | VMRProcAmpControlFlags.Contrast | VMRProcAmpControlFlags.Hue | VMRProcAmpControlFlags.Saturation); // Load mixer.GetProcAmpControl(0, ref values); // Create Saturation = new ParameterSet(values.Saturation, mixer, VMRProcAmpControlFlags.Saturation); Brightness = new ParameterSet(values.Brightness, mixer, VMRProcAmpControlFlags.Brightness); Contrast = new ParameterSet(values.Contrast, mixer, VMRProcAmpControlFlags.Contrast); Hue = new ParameterSet(values.Hue, mixer, VMRProcAmpControlFlags.Hue); } }
/// <summary> /// Aktiviert die Bildüberlagerung. /// </summary> /// <param name="bitmap">Die gewünschte Überlagerung.</param> /// <param name="left">Die linke Seite.</param> /// <param name="top">Die obere Seite.</param> /// <param name="right">Die rechte Seite.</param> /// <param name="bottom">Die untere Seite.</param> /// <param name="alpha">Der Transparenzfaktor.</param> /// <param name="sourceColor">Optional der Transparenzschlüssel.</param> public void SetOverlayBitmap(Bitmap bitmap, double left, double top, double right, double bottom, double alpha, Color?sourceColor) { // Attach to video window device context using (var self = Graphics.FromHwnd(m_VideoWindow.Handle)) { // Get the device context IntPtr originalHDC = self.GetHdc(); try { // Create the HDC IntPtr compat = CreateCompatibleDC(originalHDC); try { // Create the memory device context using (var inMem = Graphics.FromHdc(compat)) { // Get the device context IntPtr memoryHDC = inMem.GetHdc(); try { // Get the bitmap IntPtr bmp = bitmap.GetHbitmap(); try { // Select the bitmap into it IntPtr prev = SelectObject(memoryHDC, bmp); try { // Create structure var param = new VMRAlphaBitmap { Target = { Left = (float)left, Top = (float)top, Bottom = (float)bottom, Right = (float)right, }, Source = { Right = bitmap.Width, Bottom = bitmap.Height }, Flags = VMRAlphaBitmapFlags.DeviceHandle, DeviceHandle = memoryHDC, Alpha = (float)alpha, }; // Set the source color if (sourceColor.HasValue) { // Finish param.Flags |= VMRAlphaBitmapFlags.SourceColorKey; param.SourceColorKey = (uint)sourceColor.Value.ToArgb(); } // Activate using (var vmr = VMR.MarshalToManaged()) ((IVMRMixerBitmap)vmr.Object).SetAlphaBitmap(ref param); } finally { // Restore SelectObject(memoryHDC, prev); } } finally { // Cleanup DeleteObject(bmp); } } finally { // Release resources inMem.ReleaseHdc(); } } } finally { // Release HDC DeleteDC(compat); } } finally { // Release resources self.ReleaseHdc(); } } }