File tree Expand file tree Collapse file tree 3 files changed +19
-12
lines changed
Expand file tree Collapse file tree 3 files changed +19
-12
lines changed Original file line number Diff line number Diff line change @@ -190,10 +190,13 @@ font::font(
190190 if (pre_multiplied_alpha_supported) {
191191 const std::size_t area = canvas_dimensions.x * canvas_dimensions.y ;
192192 for (std::size_t i = 0 ; i < area; ++i) {
193- float a = texture_pixels[i].a / 255 .0f ;
194- texture_pixels[i].r *= a;
195- texture_pixels[i].g *= a;
196- texture_pixels[i].b *= a;
193+ float a = static_cast <float >(texture_pixels[i].a ) / 255 .0f ;
194+ texture_pixels[i].r =
195+ static_cast <unsigned char >(static_cast <float >(texture_pixels[i].r ) * a);
196+ texture_pixels[i].g =
197+ static_cast <unsigned char >(static_cast <float >(texture_pixels[i].g ) * a);
198+ texture_pixels[i].b =
199+ static_cast <unsigned char >(static_cast <float >(texture_pixels[i].b ) * a);
197200 }
198201 }
199202
Original file line number Diff line number Diff line change @@ -189,10 +189,10 @@ void material::premultiply_alpha(SDL_Surface* surface) {
189189
190190 const std::size_t area = surface->w * surface->h ;
191191 for (std::size_t i = 0 ; i < area; ++i) {
192- float a = pixel_data[i].a / 255 .0f ;
193- pixel_data[i].r *= a ;
194- pixel_data[i].g *= a ;
195- pixel_data[i].b *= a ;
192+ float a = static_cast < float >( pixel_data[i].a ) / 255 .0f ;
193+ pixel_data[i].r = static_cast < unsigned char >( static_cast < float >(pixel_data[i]. r ) * a) ;
194+ pixel_data[i].g = static_cast < unsigned char >( static_cast < float >(pixel_data[i]. g ) * a) ;
195+ pixel_data[i].b = static_cast < unsigned char >( static_cast < float >(pixel_data[i]. b ) * a) ;
196196 }
197197}
198198
Original file line number Diff line number Diff line change 55
66#include < SDL.h>
77#include < SDL_image.h>
8+ #include < algorithm>
89#include < iostream>
910
1011namespace lxgui ::gui::sdl {
@@ -58,11 +59,14 @@ void render_target::save_to_file(std::string filename) const {
5859
5960 const std::size_t area = surface->w * surface->h ;
6061 for (std::size_t i = 0 ; i < area; ++i) {
61- float a = pixel_data[i].a / 255 .0f ;
62+ float a = static_cast < float >( pixel_data[i].a ) / 255 .0f ;
6263 if (a > 0 .0f ) {
63- pixel_data[i].r /= a;
64- pixel_data[i].g /= a;
65- pixel_data[i].b /= a;
64+ pixel_data[i].r = static_cast <unsigned char >(
65+ std::clamp (static_cast <float >(pixel_data[i].r ) / a, 0 .0f , 255 .0f ));
66+ pixel_data[i].g = static_cast <unsigned char >(
67+ std::clamp (static_cast <float >(pixel_data[i].g ) / a, 0 .0f , 255 .0f ));
68+ pixel_data[i].b = static_cast <unsigned char >(
69+ std::clamp (static_cast <float >(pixel_data[i].b ) / a, 0 .0f , 255 .0f ));
6670 }
6771 }
6872
You can’t perform that action at this time.
0 commit comments