Кто-нибудь знает, как использовать BitBlt() Win32 с помощью Ruby? Похоже, вам нужно использовать конечный DC (контекст устройства) и как Ruby справится с этим? Я использую GetPixel(), и он действительно медленный, даже чтобы получить 100 пикселей (занимает около 10 секунд). Благодарю.Как использовать BitBlt от Win32 с помощью Ruby?
ответ
Второй Карл: использование экрана win32 http://github.com/jarmo/win32screenshot
Как насчет написания всего кода обработки изображений на C++ в качестве исполняемого файла Win32 и запуска его в виде отдельного процесса или вызова его из Ruby с использованием класса Win32API? Имеет смысл сделать это таким образом, вместо того, чтобы писать клад в Ruby, который никогда не будет работать.
это нормально, если только это связано с необходимостью нового процесса при каждом вызове BitBlt(), тогда производительность не будет такой хорошей. Также он будет включать в себя некоторую связь между процессами, чтобы передать битмап назад. –
Вы не знаете, как будет выглядеть производительность, потому что вы не протестировали его. Это зависит от вашего использования. –
И я не вижу проблемы с коммуникацией между программами. Это очень распространенная вещь. –
Я бы не дошел до Эд; скорее всего, вы только хотите сделать некоторые относительно простые и обычные вещи, которые будет делать обычный графический интерфейс. Для этого такие библиотеки уже существуют и не нуждаются в написании.
Одним из примеров будет wxRuby.
Боюсь, что я не знаком с этим, но, возможно, он уже предлагает некоторые методы утилиты для захвата экрана.
Если операция Ruby занимает 10 секунд, она должна делать что-то, что «обычный» GUI не сделал бы. Тем не менее, ОП не говорит нам, что они на самом деле пытаются сделать, поэтому кто знает. –
Согласен, мы только размышляем. Но эй, там не так много нового под солнцем: что бы он ни делал, возможно, уже было сделано, возможно, даже в Рубине, или это невозможно или незаконно (в этом случае это было сделано!). Давайте посмотрим, какие дальнейшие ключи появляются! :) –
Да, я никогда не пытался сделать серьезную обработку изображений в Ruby, поэтому я более склонен полагаться на что-то вроде C++ для этого. –
Я хотел бы отметить, что я вижу подобное. В Vista Vista GetPixel чрезвычайно медленная. Я решил, что это так, когда вы используете эту вещь Aero. Если вы задаете тему рабочего стола одной из «классических» настроек, она снова будет быстрой. И оценка OP ~ 10 секунд не ошибается, верьте или нет. Это действительно чрезвычайно медленно.
Я тоже ищу BitBlt в Ruby. Я ожидаю, что мне нужно это выяснить/написать, но надеялся, что кто-то еще отправил пример. другой пост
Где вы пытаетесь блитирования к? –
Надеюсь, что это 100 пикселей в массив цветов. точно так же, как делать GetPixel() и помещать цвет в массив. –
Обновлен мой ответ в комментариях. –