2009-12-09 3 views
0

Кто-нибудь знает, как использовать BitBlt() Win32 с помощью Ruby? Похоже, вам нужно использовать конечный DC (контекст устройства) и как Ruby справится с этим? Я использую GetPixel(), и он действительно медленный, даже чтобы получить 100 пикселей (занимает около 10 секунд). Благодарю.Как использовать BitBlt от Win32 с помощью Ruby?

+0

Где вы пытаетесь блитирования к? –

+0

Надеюсь, что это 100 пикселей в массив цветов. точно так же, как делать GetPixel() и помещать цвет в массив. –

+0

Обновлен мой ответ в комментариях. –

ответ

1

Как насчет написания всего кода обработки изображений на C++ в качестве исполняемого файла Win32 и запуска его в виде отдельного процесса или вызова его из Ruby с использованием класса Win32API? Имеет смысл сделать это таким образом, вместо того, чтобы писать клад в Ruby, который никогда не будет работать.

+0

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

+0

Вы не знаете, как будет выглядеть производительность, потому что вы не протестировали его. Это зависит от вашего использования. –

+0

И я не вижу проблемы с коммуникацией между программами. Это очень распространенная вещь. –

0

Я бы не дошел до Эд; скорее всего, вы только хотите сделать некоторые относительно простые и обычные вещи, которые будет делать обычный графический интерфейс. Для этого такие библиотеки уже существуют и не нуждаются в написании.

Одним из примеров будет wxRuby.

Боюсь, что я не знаком с этим, но, возможно, он уже предлагает некоторые методы утилиты для захвата экрана.

+0

Если операция Ruby занимает 10 секунд, она должна делать что-то, что «обычный» GUI не сделал бы. Тем не менее, ОП не говорит нам, что они на самом деле пытаются сделать, поэтому кто знает. –

+0

Согласен, мы только размышляем. Но эй, там не так много нового под солнцем: что бы он ни делал, возможно, уже было сделано, возможно, даже в Рубине, или это невозможно или незаконно (в этом случае это было сделано!). Давайте посмотрим, какие дальнейшие ключи появляются! :) –

+0

Да, я никогда не пытался сделать серьезную обработку изображений в Ruby, поэтому я более склонен полагаться на что-то вроде C++ для этого. –

1

Я хотел бы отметить, что я вижу подобное. В Vista Vista GetPixel чрезвычайно медленная. Я решил, что это так, когда вы используете эту вещь Aero. Если вы задаете тему рабочего стола одной из «классических» настроек, она снова будет быстрой. И оценка OP ~ 10 секунд не ошибается, верьте или нет. Это действительно чрезвычайно медленно.

Я тоже ищу BitBlt в Ruby. Я ожидаю, что мне нужно это выяснить/написать, но надеялся, что кто-то еще отправил пример. другой пост