Как вычесть один битовый массив от другого в C#/.NET?

вы находитесь в правильном направлении, единственная проблема заключается в том, что вы изменяете свойство display вместо opacity.

Когда вы применяете transition к элементу по свойству непрозрачности - элемент должен появиться с opacity: 0, а затем непрозрачность должна быть изменена на opacity: 0.7. В таком случае вы увидите эффект затемнения.

Вот кодовая песочница, которая демонстрирует этот сценарий. https://codesandbox.io/s/wnrokmvw55

6
задан Lasse V. Karlsen 29 December 2008 в 14:03
поделиться

5 ответов

Реальный вопрос, какие различия Вы хотите показать? Если просто необходимо воздействовать на значения цвета RGB, лучший выбор, по-моему, состоит в том, чтобы просто просканировать через оба битовых массива и сравнить использование Значений цвета GetPixel и использовать SetPixel для генерации битового массива 'различия'. Возможно, Вы просто хотите вычесть значения и использовать значения как новое Значение цвета для третьего битового массива. Или возможно Вы хотите вычислить яркость и использование это. Еще лучше, если Вы имеете три метрики для сравнения, присваиваете каждого R G и компонентам B цвета. Я использовал этот подход для фрактальной колоризации прежде.

Существуют другие подходы, но с этим Вы ограничены только своим воображением. Это не может быть самый быстрый подход, но это не кажется, что производительность необходима для этого сценария.

7
ответ дан 8 December 2019 в 18:43
поделиться

Это может быть сделано PInvoking API-функция BitBlt. Вот некоторый пример кода:

http://www.codeproject.com/KB/GDI-plus/Bitblt_wrapper_class.aspx

Образец использует растровый код операции SRCCOPY; для получения различий между двумя битовыми массивами Вы вместо этого хотели бы использовать SRCPAINT, или что-то (Google должен дать список кодов).

GetPixel и SetPixel (на Растровом классе) являются невероятно медленными. Используя LockBits будет намного быстрее, но необходимо будет все еще написать собственный код.

Обновление: это - лучшая ссылка:

http://www.pinvoke.net/default.aspx/gdi32.BitBlt

и включает все возможные троичные растровые операции (SRCPAINT, или SRCAND, вероятно, что Вы ищете.).

2
ответ дан 8 December 2019 в 18:43
поделиться

Проверьте этот проект. Это - детектор движения, сделанный Andrew Kirillov. Он реализует несколько фильтров, чтобы заставить различия между двумя изображениями и использованием это вычислять перемещения. Это действительно хорошо сделанный и его легкое, чтобы изменить и использовать в Вашем собственном приложении.

http://www.codeproject.com/KB/audio-video/Motion_Detection.aspx

3
ответ дан 8 December 2019 в 18:43
поделиться

Во-первых, определите, вычитают;-p, На что Вы хотите, чтобы ответ был похож?

Большая часть производительности способ сделать это, вероятно, LockBits - это должно быть намного более быстро, чем много из GetPixel вызовы, но необходимо будет декодировать байты сами. Легкий, если это - просто что-то как ARGB на 32 бит/пкс, но коварный для некоторых более сложных случаев.

1
ответ дан 8 December 2019 в 18:43
поделиться

Я считал где-нибудь, что язык, используемый в Adobe Pixel Bender, вдохновлен чем-то, что однажды сделала Microsoft. Не помните, где я считал его. Мои взгляды состоят в том, что, возможно, что Microsoft "что-то" перенесено во что-то, что может использовать проект .NET. Излишество для того, чтобы просто вычесть два изображения, но так или иначе.

0
ответ дан 8 December 2019 в 18:43
поделиться
Другие вопросы по тегам:

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