5#include "core/fxge/dib/cfx_dibitmap.h"
9#include "core/fxcrt/compiler_specific.h"
10#include "core/fxcrt/fx_coordinates.h"
11#include "core/fxcrt/span.h"
12#include "core/fxge/dib/fx_dib.h"
13#include "testing/gmock/include/gmock/gmock.h"
14#include "testing/gtest/include/gtest/gtest.h"
18using ::testing::ElementsAre;
23 auto pBitmap =
pdfium::MakeRetain<CFX_DIBitmap>();
26 pBitmap =
pdfium::MakeRetain<CFX_DIBitmap>();
33 CFX_DIBitmap::CalculatePitchAndSize(100, 200, FXDIB_Format::kBgra, 0);
34 ASSERT_TRUE(result.has_value());
35 EXPECT_EQ(400u, result.value().pitch);
36 EXPECT_EQ(80000u, result.value().size);
41 ASSERT_TRUE(result.has_value());
42 EXPECT_EQ(100u, result.value().pitch);
43 EXPECT_EQ(20000u, result.value().size);
48 ASSERT_TRUE(result.has_value());
49 EXPECT_EQ(400u, result.value().pitch);
50 EXPECT_EQ(80000u, result.value().size);
55 ASSERT_TRUE(result.has_value());
56 EXPECT_EQ(455u, result.value().pitch);
57 EXPECT_EQ(91000u, result.value().size);
62 static const CFX_Size kBadDimensions[] = {
63 {0, 0}, {-1, -1}, {-1, 0}, {0, -1},
64 {0, 200}, {100, 0}, {-1, 200}, {100, -1},
66 for (
const auto& dimension : kBadDimensions) {
67 EXPECT_FALSE(CFX_DIBitmap::CalculatePitchAndSize(
68 dimension.width, dimension.height, FXDIB_Format::kBgra, 0));
69 EXPECT_FALSE(CFX_DIBitmap::CalculatePitchAndSize(
70 dimension.width, dimension.height, FXDIB_Format::kBgra, 1));
103 CFX_DIBitmap::CalculatePitchAndSize(536870908, 4, FXDIB_Format::k8bppRgb,
106 EXPECT_EQ(536870908u, result.value().pitch);
107 EXPECT_EQ(2147483632u, result.value().size);
115 EXPECT_EQ(68174084u, result.value().pitch);
116 EXPECT_EQ(4294967292u, result.value().size);
122 auto bitmap =
pdfium::MakeRetain<CFX_DIBitmap>();
124 EXPECT_EQ(3, bitmap->GetWidth());
125 EXPECT_EQ(12u, bitmap->GetPitch());
127 EXPECT_EQ(36u, bitmap->GetBuffer().size());
128 EXPECT_EQ(12u, bitmap->GetScanline(0).size());
129 EXPECT_EQ(3u, bitmap->GetScanlineAs<
FX_BGR_STRUCT<uint8_t>>(0).size());
131 EXPECT_EQ(36u, bitmap->GetWritableBuffer().size());
132 EXPECT_EQ(12u, bitmap->GetWritableScanline(0).size());
134 bitmap->GetWritableScanlineAs<
FX_BGR_STRUCT<uint8_t>>(0).size());
137#if defined(PDF_USE_SKIA)
138TEST(CFXDIBitmapTest, UnPreMultiplyFromPreMultiplied) {
139 auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
140 ASSERT_TRUE(bitmap->Create(1, 1, FXDIB_Format::kBgraPremul));
141 EXPECT_TRUE(bitmap->IsPremultiplied());
142 UNSAFE_TODO(FXARGB_SetDIB(bitmap->GetWritableBuffer().data(), 0x7f'7f'7f'7f));
144 bitmap->UnPreMultiply();
145 EXPECT_FALSE(bitmap->IsPremultiplied());
146 EXPECT_THAT(bitmap->GetBuffer(), ElementsAre(0xff, 0xff, 0xff, 0x7f));
149TEST(CFXDIBitmapTest, UnPreMultiplyFromUnPreMultiplied) {
150 auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
151 ASSERT_TRUE(bitmap->Create(1, 1, FXDIB_Format::kBgra));
152 EXPECT_FALSE(bitmap->IsPremultiplied());
153 UNSAFE_TODO(FXARGB_SetDIB(bitmap->GetWritableBuffer().data(), 0x7f'ff'ff'ff));
155 bitmap->UnPreMultiply();
156 EXPECT_FALSE(bitmap->IsPremultiplied());
157 EXPECT_THAT(bitmap->GetBuffer(), ElementsAre(0xff, 0xff, 0xff, 0x7f));
160TEST(CFXDIBitmapTest, PreMultiplyFromUnPreMultiplied) {
161 auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
162 ASSERT_TRUE(bitmap->Create(1, 1, FXDIB_Format::kBgra));
163 EXPECT_FALSE(bitmap->IsPremultiplied());
164 UNSAFE_TODO(FXARGB_SetDIB(bitmap->GetWritableBuffer().data(), 0x7f'ff'ff'ff));
166 bitmap->PreMultiply();
167 EXPECT_TRUE(bitmap->IsPremultiplied());
168 EXPECT_THAT(bitmap->GetBuffer(), ElementsAre(0x7f, 0x7f, 0x7f, 0x7f));
171TEST(CFXDIBitmapTest, PreMultiplyFromPreMultiplied) {
172 auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
173 ASSERT_TRUE(bitmap->Create(1, 1, FXDIB_Format::kBgraPremul));
174 EXPECT_TRUE(bitmap->IsPremultiplied());
175 UNSAFE_TODO(FXARGB_SetDIB(bitmap->GetWritableBuffer().data(), 0x7f'7f'7f'7f));
177 bitmap->PreMultiply();
178 EXPECT_TRUE(bitmap->IsPremultiplied());
179 EXPECT_THAT(bitmap->GetBuffer(), ElementsAre(0x7f, 0x7f, 0x7f, 0x7f));
static std::optional< PitchAndSize > CalculatePitchAndSize(int width, int height, FXDIB_Format format, uint32_t pitch)
CFX_STemplate< int32_t > CFX_Size
TEST(FXCRYPT, MD5GenerateEmtpyData)