Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
303 views
in Technique[技术] by (71.8m points)

c# - Limiting the average brightness of a Canvas containing also a MediaElement, frame by frame

In my WPF application there is a Canvas containing a MediaElement and some other stuff. I need to limit overall brightness, calculated as the average of all RGB values of all pixels inside the canvas. This average value should not exceed let's say 128 (which is half brightness). Currently I have a 50ms timer which calls the renderTargetBitmap.Render(canvas) to catch the image, meausures the image and finally sets the canvas opacity accordingly:

void TimerOpac_Tick(object sender, EventArgs e) 
{ 
    RenderTargetBitmap bmp = new RenderTargetBitmap(MyCanvas.RenderSize.Width MyCanvas.RenderSize.Height, 96, 96, System.Windows.Media.PixelFormats.Pbgra32);
    bmp.Render(MyCanvas);
    int bytesPerPixel = 4;
    byte[] bytes = new byte[bmp.PixelWidth * bmp.PixelHeight * bytesPerPixel];
    bmp.CopyPixels(bytes, bmp.PixelWidth * bytesPerPixel, 0);
    int AvgLimit = 128;      
    MyCanvas.Opacity = MeasureAvgAndCalcLimitingOpacity(bytes, AvgLimit);
}

This works but has a delay, it's not frame by frame. Is there a better way, hopefully in WPF but maybe also using something at lower level?

question from:https://stackoverflow.com/questions/65905777/limiting-the-average-brightness-of-a-canvas-containing-also-a-mediaelement-fram

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...