Preventing TV / Monitor Recording in WPF

I recently completed a WPF program for a client who will work on TVs with burning at least 12 (maybe even 16+ hours) per day. The problem is that the data is close to static (some texts change every few hours, but for the most part they are static). Another problem is that the design is very specific and should remain so that I cannot move elements by accident. I also can not do anything dramatic, as if something is bouncing around the screen, as important information will be displayed on the screens.

So, I'm struggling to find a way to prevent a burn. What is a good way to prevent this? Preferably in WPF. The client and I came up with a possible solution that the AHK script launches a screen saver every hour, but it seems really hacked.

+6
source share
6 answers

Why not just build a storyboard in a mixture that slowly, over 30 minutes, changes the color scheme to something else that doesn't collide, and then changes it again?

+4
source

By doing a quick google search, I found this, and it can be useful.

CRTs and older plasma televisions were quite susceptible to burning, but many modern televisions have functions designed to reduce risk. Many of them contain a feature called โ€œpixel offset,โ€ for example, which changes the image on the screen so that the pixels change regularly (but not so much that it is noticeable to you). Some cheaper plasmas may be more susceptible, so this is the area where you get what you pay for.

With that said, perhaps you can emulate the same effect with your program. You can move the whole view a few pixels left or right, and in a day they will move back. It might be easier than saying, since I don't have actual WPF experience, but I thought it was a neat idea.

Link: http://lifehacker.com/5982108/is-burn-in-still-an-issue-on-tvs-and-monitors

+2
source

Could you use something like a vertical "Refresh Bar", which is periodically viewed on the screen, drawn in exclusive mode or above the status text and fields?

In the "XOR mode referh bar" mode, I mean something like this, which scans the screen every few minutes in the direction of the arrow shown:

enter image description here

+2
source

A new answer for a new approach. It is much simpler and has animation:

<Grid x:Name="MyGrid"> <Grid.Background> <SolidColorBrush x:Name="bg" Color="Red"/> </Grid.Background> <Grid.Triggers> <EventTrigger RoutedEvent="Window.Loaded"> <BeginStoryboard> <Storyboard RepeatBehavior="Forever"> <ColorAnimation Storyboard.TargetName="bg" Storyboard.TargetProperty="Color" From="Red" To="Blue" Duration="0:0:10" BeginTime="0:0:0"/> <ColorAnimation Storyboard.TargetName="bg" Storyboard.TargetProperty="Color" From="Blue" To="Red" Duration="0:0:10" BeginTime="0:0:10"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Grid.Triggers> </Grid> 

Set the duration to 30 minutes. Naturally, this will cause the color to turn purple from time to time. I did not think that this was acceptable for your client, so I did not offer it at the initial stage.

If this is unacceptable, the option is to extrude the controls before switching colors. (Add two more double animations for opacity to the storyboard).

+2
source

Here is an example that switches the grid color each time using DispatcherTimer :

 public partial class MainWindow : Window, INotifyPropertyChanged { private bool _isMainColour; public SolidColorBrush CurrentColour { get; set; } private DispatcherTimer _timer; public MainWindow() { InitializeComponent(); DataContext = this; _timer = new DispatcherTimer(); _timer.Interval = new TimeSpan(0, 0, 1); _timer.Tick += _timer_Tick; _timer.Start(); } void _timer_Tick(object sender, EventArgs e) { if (_isMainColour) { CurrentColour = new SolidColorBrush(Colors.Blue); } else { CurrentColour = new SolidColorBrush(Colors.Red); } _isMainColour = !_isMainColour; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("CurrentColour")); } } public event PropertyChangedEventHandler PropertyChanged; } 

And XAML:

 <Window x:Class="WpfApplication4.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" Background="Black"> <Grid Background="{Binding CurrentColour}"> </Grid> </Window> 

Obviously, this requires better structuring, but it shows a basic principle.

+1
source

I would say that linking colors to resources using DyanmicResource bindings is a good start.

Then you can implement the timer in the app.cs application, which, when launched, updates the values:

 this.Resource["PrimaryColour"] = Color.FromRgb(200, 200, 200); 
+1
source

Source: https://habr.com/ru/post/972984/


All Articles