Calculate the pixels before you enter the loop, approximately as follows:
d = size*0.5 of decal to draw on terrain
get pos_x in 0..1 via terrain size (might not be defined, take care)
pos_x = (mouse.x-d-terrain.x+terrain.min_x)/(terrain.max_x-terrain.min_x);
pos_x *= bmap_width(terrain.skin);
get pos_x2 with "+d" for upper pixel limit
pos_x2 = (mouse.x+d-terrain.x+terrain.min_x)/(terrain.max_x-terrain.min_x);
pos_x2 *= bmap_width(terrain.skin);
same for pos_y
for(i = pos_x; i <= pos_x2; i++)
for(j = pos_y; j <= pos_y2; j++)
{
grab pixel at (i-pos_x)/(pos_x2-pos_x)*bmap_width(decal),(j-...);
write at i,j into terrain skin
}
}