From: Eunki Hong Date: Fri, 10 Mar 2023 13:28:26 +0000 (+0900) Subject: [Tizen] Let ignore 32bit bmp format ignore alpha force X-Git-Tag: accepted/tizen/7.0/unified/20230330.014304~8 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git;a=commitdiff_plain;h=e6cba0a1ca464ec42975efb84c759e2a63ff82c7 [Tizen] Let ignore 32bit bmp format ignore alpha force Change-Id: I0d9521088ebb4cb9a1cf1cd822f828bc09745298 Signed-off-by: Eunki Hong --- diff --git a/automated-tests/images/test_32bpp.bmp b/automated-tests/images/test_32bpp.bmp new file mode 100644 index 0000000..9524f76 Binary files /dev/null and b/automated-tests/images/test_32bpp.bmp differ diff --git a/automated-tests/images/test_32bpp.bmp.buffer b/automated-tests/images/test_32bpp.bmp.buffer new file mode 100644 index 0000000..5e98292 Binary files /dev/null and b/automated-tests/images/test_32bpp.bmp.buffer differ diff --git a/automated-tests/src/dali-adaptor-internal/utc-Dali-BmpLoader.cpp b/automated-tests/src/dali-adaptor-internal/utc-Dali-BmpLoader.cpp index 7babde8..cba2539 100644 --- a/automated-tests/src/dali-adaptor-internal/utc-Dali-BmpLoader.cpp +++ b/automated-tests/src/dali-adaptor-internal/utc-Dali-BmpLoader.cpp @@ -38,6 +38,16 @@ int UtcDaliBmp24bpp(void) END_TEST; } +int UtcDaliBmp32bpp(void) +{ + ImageDetails image(TEST_IMAGE_DIR "/test_32bpp.bmp", 127u, 64u); + + // Note : Currently we hard-overrite alpha channel as 255. + // Please fix UTC if we change current policy. + TestImageLoading(image, BmpLoaders); + + END_TEST; +} int UtcDaliBmpRGB8(void) { ImageDetails image(TEST_IMAGE_DIR "/w3c_home_256.bmp", 72u, 48u); diff --git a/dali/internal/imaging/common/loader-bmp.cpp b/dali/internal/imaging/common/loader-bmp.cpp index 08df18c..37a9bdc 100644 --- a/dali/internal/imaging/common/loader-bmp.cpp +++ b/dali/internal/imaging/common/loader-bmp.cpp @@ -1070,13 +1070,17 @@ bool LoadBitmapFromBmp(const Dali::ImageLoader::Input& input, Dali::Devel::Pixel switch(infoHeader.compression) { case 0: + { switch(infoHeader.bitsPerPixel) { case 32: + { pixelFormat = Pixel::BGR8888; break; + } case 24: + { if(fileHeader.offset == FileHeaderOffsetOfRGB24V5) //0x8A { customizedFormat = BMP_RGB24V5; @@ -1086,27 +1090,40 @@ bool LoadBitmapFromBmp(const Dali::ImageLoader::Input& input, Dali::Devel::Pixel pixelFormat = Pixel::RGB888; } break; + } case 16: + { customizedFormat = BMP_RGB555; break; + } case 8: + { customizedFormat = BMP_RGB8; break; + } case 4: // RGB4 + { customizedFormat = BMP_RGB4; break; + } case 1: //RGB1 + { customizedFormat = BMP_RGB1; break; + } + default: + { DALI_LOG_ERROR("%d bits per pixel not supported for BMP files\n", infoHeader.bitsPerPixel); return false; + } } break; + } case 1: //// RLE8 { if(infoHeader.bitsPerPixel == 8) @@ -1165,8 +1182,10 @@ bool LoadBitmapFromBmp(const Dali::ImageLoader::Input& input, Dali::Devel::Pixel break; } default: + { DALI_LOG_ERROR("Compression not supported for BMP files\n"); return false; + } } bool topDown = false; @@ -1227,6 +1246,7 @@ bool LoadBitmapFromBmp(const Dali::ImageLoader::Input& input, Dali::Devel::Pixel break; } default: + { if(pixelFormat == Pixel::RGB565) { pixelBufferW = ((imageW & 3) != 0) ? imageW + 4 - (imageW & 3) : imageW; @@ -1240,6 +1260,7 @@ bool LoadBitmapFromBmp(const Dali::ImageLoader::Input& input, Dali::Devel::Pixel newPixelFormat = pixelFormat; } break; + } } bitmap = Dali::Devel::PixelBuffer::New(pixelBufferW, pixelBufferH, newPixelFormat); @@ -1328,6 +1349,16 @@ bool LoadBitmapFromBmp(const Dali::ImageLoader::Input& input, Dali::Devel::Pixel break; } + // If 32 bit mode then Alpha pixels must be ignored. + // BGR8888 format doesn't seem to be supported by graphics-api + if(infoHeader.bitsPerPixel == 32) + { + for(unsigned int i = 3; i < rowStride; i += 4) + { + pixelsIterator[i] = 255u; + } + } + // If 24 bit mode then swap Blue and Red pixels // BGR888 doesn't seem to be supported by dali-core if(infoHeader.bitsPerPixel == 24)