Для каждой точки каждого канала RGB:
dst = (foreground*transparency + background*(255 - transparency))/255;
Здесь предполагается, что у нас 1 байт на канал. Прозрачность может быть как одинаковой для всего изображения, так и меняться от точки к точке.