Почему GetPixel () так медленно использует Ruby (или, возможно, Perl или Python) и как это сделать другими методами? - PullRequest
1 голос
/ 05 декабря 2009

Я пытался использовать Win32 GetPixel () с Ruby, и это действительно медленно даже на четырехъядерном компьютере Intel. Я думаю, например, если я получу действительно маленькую область, такую ​​как 100 x 10 пикселей = 1000 пикселей, и это может занять 30 секунд. Есть ли лучший способ, например, получить регион сразу?

Ответы [ 2 ]

1 голос
/ 05 декабря 2009

Я не знаю много о Руби, но разве это не интерпретируется? Если это так, и вы вызываете вызов Win32 API через предполагаемую одну из библиотек Rubys и вдобавок к этому вызову GetPixel, тогда да, это будет медленно.

Если у вас есть доступ к API Win32 через Ruby, вам следует изучить BitBlt. Bit-Block-Transfer, который будет возвращать буфер значений, а не отдельные значения. Это будет в разы быстрее.

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

http://winprog.org/tutorial/bitmaps.html

1 голос
/ 05 декабря 2009

Я думаю, что вам нужна функция BitBlt.

...