Посмотрите на библиотеку PIL для языка python. Вам потребуется применить какие-то фильтры, чтобы сделать изображение черно-белым, возможно уменьшить разрешение. Затем посчитать долю
черных пикселей от всего изображения.
За вас память в си никто не выделяет.
Цитата отсюда:
To avoid overflows, the size of the array pointed by destination shall be long enough to contain the same C string as source (including the terminating null character), and should not overlap in memory with source.
Если нельзя просто добавить виртуальную функцию, можно попробовать получать информацию о типе с помощью typeid. Подозрительно, что такая задача возникла.