/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #pragma once #include #include #include namespace vcl::bitmap { /** * Intended to be used to feed into CreateFromData to create a BitmapEx. RGB data format. */ class VCL_DLLPUBLIC RawBitmap { friend BitmapEx VCL_DLLPUBLIC CreateFromData(RawBitmap&& rawBitmap); std::unique_ptr mpData; Size maSize; sal_uInt8 mnBitCount; public: RawBitmap(Size const& rSize, sal_uInt8 nBitCount) : maSize(rSize) , mnBitCount(nBitCount) { assert(nBitCount == 24 || nBitCount == 32); if (rSize.getWidth() > std::numeric_limits::max() || rSize.getWidth() < 0) throw std::bad_alloc(); if (rSize.getHeight() > std::numeric_limits::max() || rSize.getHeight() < 0) throw std::bad_alloc(); sal_Int32 nRowSize, nDataSize; if (o3tl::checked_multiply(rSize.getWidth(), nBitCount / 8, nRowSize) || o3tl::checked_multiply(nRowSize, rSize.getHeight(), nDataSize) || nDataSize < 0) { throw std::bad_alloc(); } mpData.reset(new sal_uInt8[nDataSize]); } void SetPixel(tools::Long nY, tools::Long nX, Color nColor) { tools::Long p = (nY * maSize.getWidth() + nX) * (mnBitCount / 8); mpData[p++] = nColor.GetRed(); mpData[p++] = nColor.GetGreen(); mpData[p++] = nColor.GetBlue(); if (mnBitCount == 32) mpData[p] = nColor.GetAlpha(); } void SetAlpha(tools::Long nY, tools::Long nX, sal_uInt8 nAlpha) { assert(mnBitCount == 32); tools::Long p = (nY * maSize.getWidth() + nX) * (mnBitCount / 8) + 3; mpData[p] = nAlpha; } Color GetPixel(tools::Long nY, tools::Long nX) const { tools::Long p = (nY * maSize.getWidth() + nX) * mnBitCount / 8; if (mnBitCount == 24) return Color(mpData[p], mpData[p + 1], mpData[p + 2]); else return Color(ColorAlpha, mpData[p + 3], mpData[p], mpData[p + 1], mpData[p + 2]); } // so we don't accidentally leave any code in that uses palette color indexes void SetPixel(tools::Long nY, tools::Long nX, BitmapColor nColor) = delete; tools::Long Height() const { return maSize.Height(); } tools::Long Width() const { return maSize.Width(); } sal_uInt8 GetBitCount() const { return mnBitCount; } }; } // end vcl::bitmap /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ option value='distro/collabora/co-24.04.3'>distro/collabora/co-24.04.3 LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2024-05-16android lint: Udate lint-baseline.xmlMichael Weghorn
2024-05-14android: Update Android Gradle Plugin to 8.4.0Michael Weghorn
2024-04-15android: Update Android Gradle Plugin to 8.3.2Michael Weghorn
2023-12-15android: Update lint baselineMichael Weghorn
2023-12-13android: Make the build fail on new lint warningsMichael Weghorn