Хороший алгоритм зависит как от ваших задач (скорость/качество), так и от вашего изображения (фото/тескт, размыто/пикселизаронно). Вы уверенны, что хотите сами реализовывать что-то, а не воспользоваться готовыми решениями? Есть на любом языке библиотеки для этого. Ну или если вы используете OpenGL, например, то можете просто отрисовать текстуру в буфер нужного размера. В любом случае, не понимая ваших целей и доступных средств, очень сложно что-то рекомендовать.