| // Copyright 2014 The PDFium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
| #include "core/fxge/dib/fx_dib.h" | |
| #include <tuple> | |
| #include <utility> | |
| #include "build/build_config.h" | |
| #if BUILDFLAG(IS_WIN) | |
| #include <windows.h> | |
| #endif | |
| #if BUILDFLAG(IS_WIN) | |
| static_assert(sizeof(FX_COLORREF) == sizeof(COLORREF), | |
| "FX_COLORREF vs. COLORREF mismatch"); | |
| #endif | |
| FXDIB_Format MakeRGBFormat(int bpp) { | |
| switch (bpp) { | |
| case 1: | |
| return FXDIB_Format::k1bppRgb; | |
| case 8: | |
| return FXDIB_Format::k8bppRgb; | |
| case 24: | |
| return FXDIB_Format::kRgb; | |
| case 32: | |
| return FXDIB_Format::kRgb32; | |
| default: | |
| return FXDIB_Format::kInvalid; | |
| } | |
| } | |
| FXDIB_ResampleOptions::FXDIB_ResampleOptions() = default; | |
| bool FXDIB_ResampleOptions::HasAnyOptions() const { | |
| return bInterpolateBilinear || bHalftone || bNoSmoothing || bLossy; | |
| } | |
| std::tuple<int, int, int, int> ArgbDecode(FX_ARGB argb) { | |
| return std::make_tuple(FXARGB_A(argb), FXARGB_R(argb), FXARGB_G(argb), | |
| FXARGB_B(argb)); | |
| } | |
| std::pair<int, FX_COLORREF> ArgbToAlphaAndColorRef(FX_ARGB argb) { | |
| return {FXARGB_A(argb), ArgbToColorRef(argb)}; | |
| } | |
| FX_COLORREF ArgbToColorRef(FX_ARGB argb) { | |
| return FXSYS_BGR(FXARGB_B(argb), FXARGB_G(argb), FXARGB_R(argb)); | |
| } | |
| FX_ARGB AlphaAndColorRefToArgb(int a, FX_COLORREF colorref) { | |
| return ArgbEncode(a, FXSYS_GetRValue(colorref), FXSYS_GetGValue(colorref), | |
| FXSYS_GetBValue(colorref)); | |
| } |