Я не знаю много о Руби, но разве это не интерпретируется? Если это так, и вы вызываете вызов Win32 API через предполагаемую одну из библиотек Rubys и вдобавок к этому вызову GetPixel, тогда да, это будет медленно.
Если у вас есть доступ к API Win32 через Ruby, вам следует изучить BitBlt. Bit-Block-Transfer, который будет возвращать буфер значений, а не отдельные значения. Это будет в разы быстрее.
Конечно, теперь вам приходится иметь дело с контекстом устройства, структурами растрового изображения и необработанной памятью, которые, возможно, являются конструкциями более низкого уровня, чем предусмотрено в Ruby.
http://winprog.org/tutorial/bitmaps.html