Skip to content

Commit b30553e

Browse files
committed
WebP loading improvements WebP loaded as premultiplied alpha if it have alpha
1 parent 3dbc453 commit b30553e

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

cocos/platform/CCImage.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2121,19 +2121,19 @@ bool Image::initWithWebpData(const unsigned char * data, ssize_t dataLen)
21212121
if (WebPGetFeatures(static_cast<const uint8_t*>(data), dataLen, &config.input) != VP8_STATUS_OK) break;
21222122
if (config.input.width == 0 || config.input.height == 0) break;
21232123

2124-
config.output.colorspace = MODE_RGBA;
2125-
_renderFormat = Texture2D::PixelFormat::RGBA8888;
2124+
config.output.colorspace = config.input.has_alpha?MODE_rgbA:MODE_RGB;
2125+
_renderFormat = config.input.has_alpha?Texture2D::PixelFormat::RGBA8888:Texture2D::PixelFormat::RGB888;
21262126
_width = config.input.width;
21272127
_height = config.input.height;
21282128

2129-
//webp doesn't have premultipliedAlpha
2130-
_hasPremultipliedAlpha = false;
2129+
//we ask webp to give data with premultiplied alpha
2130+
_hasPremultipliedAlpha = config.input.has_alpha;
21312131

2132-
_dataLen = _width * _height * 4;
2132+
_dataLen = _width * _height * (config.input.has_alpha?4:3);
21332133
_data = static_cast<unsigned char*>(malloc(_dataLen * sizeof(unsigned char)));
21342134

21352135
config.output.u.RGBA.rgba = static_cast<uint8_t*>(_data);
2136-
config.output.u.RGBA.stride = _width * 4;
2136+
config.output.u.RGBA.stride = _width * (config.input.has_alpha?4:3);
21372137
config.output.u.RGBA.size = _dataLen;
21382138
config.output.is_external_memory = 1;
21392139

0 commit comments

Comments
 (0)