You're code is not quite clear to me, but you may check what you've already done of these steps Approach #1: ------------ <!-- language: lang-none --> for each scanline in the original BMP { get the location of the file position indicator repeat n times // resize vertically { if we're not at the beginning of the current scanline { set the file position indicator back at the beginning of the scanline } for each RGBTRIPLE in this scanline { read an RGBTRIPLE write that RGBTRIPLE n times // resize horizontally } write the new padding to the new BMP } skip the old padding } Approach #2: ------------ <!-- language: lang-none --> for each scanline in the original BMP { create an RGBTRIPLEs array named triples of size (original width * 2) for each RGBTRIPLE in the current scanline { read an RGBTRIPLE repeat n times // resize horizontally { store the RGBTRIPLE into the current index of triples } } // resize resize vertically repeat n times { write the whole array into the new BMP write the new padding } skip the old padding } Hope that helps!