Что ж, для примера, который вы приводите для GetPixel, он медленный, потому что он использует драйвер режима ядра для выполнения реальной работы, и в этом драйвере он выполняет ряд проверок и блокировок, чтобы увидеть, действительно ли переданный вами контекст устройства передан. DC и чтобы убедиться, что он не изменен где-то в функции, затем он копирует область в новое растровое изображение в памяти и считывает нужный вам пиксель, а затем освобождает растровое изображение.
Таким образом, у вас есть переключатель режима ядра, блокировки, проверки и выделение памяти, копирование и освобождение, а затем другой режим переключается обратно на пользовательскую землю, и все это требует времени, и поиск способа использования функциональности GetPixel в вашей программе сэкономит вам десятки тысяч тактов.
Но другой вызов API вполне может стоить не более нескольких операций чтения и записи в память, поэтому очень сильно зависит от того, какой вызов в ОС вы делаете.