Optimize gr_remap_bitmap_good integer handling

This commit is contained in:
Kp 2015-01-25 05:32:45 +00:00
parent 4488458ed8
commit 06142a6c80
2 changed files with 7 additions and 7 deletions

View file

@ -186,30 +186,30 @@ void gr_remap_bitmap( grs_bitmap * bmp, palette_array_t &palette, int transparen
gr_set_super_transparent(*bmp, 0);
}
void gr_remap_bitmap_good(grs_bitmap &bmp, palette_array_t &palette, int transparent_color, int super_transparent_color)
void gr_remap_bitmap_good(grs_bitmap &bmp, palette_array_t &palette, uint_fast32_t transparent_color, uint_fast32_t super_transparent_color)
{
array<uint8_t, 256> colormap;
array<unsigned, 256> freq;
build_colormap_good( palette, colormap, freq );
if ( (super_transparent_color>=0) && (super_transparent_color<=255))
if (super_transparent_color < colormap.size())
colormap[super_transparent_color] = 254;
if ( (transparent_color>=0) && (transparent_color<=255))
if (transparent_color < colormap.size())
colormap[transparent_color] = TRANSPARENCY_COLOR;
if (bmp.bm_w == bmp.bm_rowsize)
decode_data(bmp.get_bitmap_data(), bmp.bm_w * bmp.bm_h, colormap, freq );
else {
auto p = bmp.get_bitmap_data();
for (int y=0;y<bmp.bm_h;y++,p+=bmp.bm_rowsize)
for (uint_fast32_t y = bmp.bm_h; y--; p += bmp.bm_rowsize)
decode_data(p, bmp.bm_w, colormap, freq );
}
if ( (transparent_color>=0) && (transparent_color<=255) && (freq[transparent_color]>0) )
if (transparent_color < freq.size() && freq[transparent_color])
gr_set_transparent(bmp, 1);
if ( (super_transparent_color>=0) && (super_transparent_color<=255) && (freq[super_transparent_color]>0) )
if (super_transparent_color < freq.size() && freq[super_transparent_color])
gr_set_super_transparent(bmp, 1);
}

View file

@ -456,7 +456,7 @@ void gr_remap_bitmap( grs_bitmap * bmp, palette_array_t &palette, int transparen
// Same as above, but searches using gr_find_closest_color which uses
// 18-bit accurracy instead of 15bit when translating colors.
void gr_remap_bitmap_good(grs_bitmap &bmp, palette_array_t &palette, int transparent_color, int super_transparent_color);
void gr_remap_bitmap_good(grs_bitmap &bmp, palette_array_t &palette, uint_fast32_t transparent_color, uint_fast32_t super_transparent_color);
void gr_palette_step_up( int r, int g, int b );