/* * Copyright (c) 2024, Nico Weber * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Gfx { struct CMYK { u8 c; u8 m; u8 y; u8 k; }; class CMYKBitmap : public RefCounted { public: static ErrorOr> create_with_size(IntSize const& size); IntSize const& size() const { return m_size; } [[nodiscard]] CMYK* scanline(int y); [[nodiscard]] CMYK const* scanline(int y) const; [[nodiscard]] CMYK* begin(); [[nodiscard]] CMYK* end(); private: CMYKBitmap(IntSize const& size, ByteBuffer data) : m_size(size) , m_data(move(data)) { } IntSize m_size; ByteBuffer m_data; }; inline CMYK* CMYKBitmap::scanline(int y) { VERIFY(y >= 0 && y < m_size.height()); return reinterpret_cast(m_data.data() + y * m_size.width() * sizeof(CMYK)); } inline CMYK const* CMYKBitmap::scanline(int y) const { VERIFY(y >= 0 && y < m_size.height()); return reinterpret_cast(m_data.data() + y * m_size.width() * sizeof(CMYK)); } inline CMYK* CMYKBitmap::begin() { return reinterpret_cast(m_data.data()); } inline CMYK* CMYKBitmap::end() { return reinterpret_cast(m_data.data() + m_data.size()); } }