Фильтр дисплейного отображения C#

Немного трудно объяснить, в чем я нуждаюсь, но я попробую:

Я должен записать приложение (winform), которая будет некоторым фильтром для отображения/другого форм позади него. За одним исключением - все позади формы должны взгляды, как кроме красного (например), окрашивают, которые должны быть заменены к любому другому указанному цвету, белому, например.

Поэтому давайте предположим, что я открыл окна Word с немногими строками текста. С красными и черными буквами. Таким образом, когда я помещаю свое приложение выше этого текста - это должно "отфильтровать" красные символы и заполнить их белому.

Таким образом, поскольку я понимаю эту задачу: я должен привязать область позади формы, затем обработать ее (цвета замены) и после того, как нарисуют это изображение на моем теле формы.

Какие-либо ссылки или ключевые слова для решения?

UPD:

таким образом - это - мое конечное решение:

  1. действительно сформируйтесь прозрачный (использование свойств TransparencyKey и BackColor)
  2. поместите поле изображения над формой
  3. когда мы должны обновить изображение в поле изображения - мы заменяем текущее изображение pictureBox1. Изображение = пустой указатель; затем обновляя форму с (это. Обновление ()), и делают новый снимок

спасибо за все ;-)

UPD 2: демонстрационный http://dl.dropbox.com/u/4486681/result.png

UPD 3: вот источники

5
задан zerkms 2 March 2010 в 14:43
поделиться

2 ответа

вы можете создать снимок рабочего стола, используя следующий код:

public Bitmap CaptureScreen()
{
    Bitmap b = new Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height);
    Graphics g = Graphics.FromImage(b);
    g.CopyFromScreen(0, 0, 0, 0, b.Size);
    g.Dispose();
    return b;
}

Замените размеры и положение координатами вашей формы. Таким образом вы получите растровое изображение того, что стоит за вашей формой. Затем вы можете выполнить замену цвета на этом растровом изображении.

Обратите внимание, что из-за таких настроек, как ClearType и других механизмов сглаживания, вы также должны учитывать «промежуточные пиксели» при замене цвета. Иначе все будет выглядеть забавно: -)

3
ответ дан 15 December 2019 в 06:24
поделиться

Я не знаю, можно ли это вообще сделать (посмотрим, что ответят другие :-).

Вы можете получить дескриптор контекста экранного устройства, который дает вам растровое изображение экрана.

HDC dc = GetDC (NULL);

(Это C ++, вам придется использовать P / Invoke или создать библиотеку смешанного режима на C ++)

Затем вы можете перерисовать область экран с вашим процессом фильтрации.

Теперь начинаются проблемы:

  • как узнать, что пиксели в интересующей вас области изменились?
  • Если область изменяется, видны ли изменения или скрыты вашим собственным рисунком.

У вас может быть где-нибудь кнопка, которая на мгновение скрывает ваше собственное приложение и показывает его при повторном нажатии, а также фильтрует новый контент.

Удачи. Есть ли возможность поделиться пользовательским сценарием?

0
ответ дан 15 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: