CMYKBitmap.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. * Copyright (c) 2024, Nico Weber <thakis@chromium.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/ByteBuffer.h>
  8. #include <AK/NonnullRefPtr.h>
  9. #include <AK/RefCounted.h>
  10. #include <LibGfx/Size.h>
  11. namespace Gfx {
  12. struct CMYK {
  13. u8 c;
  14. u8 m;
  15. u8 y;
  16. u8 k;
  17. };
  18. class CMYKBitmap : public RefCounted<CMYKBitmap> {
  19. public:
  20. static ErrorOr<NonnullRefPtr<CMYKBitmap>> create_with_size(IntSize const& size);
  21. IntSize const& size() const { return m_size; }
  22. [[nodiscard]] CMYK* scanline(int y);
  23. [[nodiscard]] CMYK const* scanline(int y) const;
  24. [[nodiscard]] CMYK* begin();
  25. [[nodiscard]] CMYK* end();
  26. private:
  27. CMYKBitmap(IntSize const& size, ByteBuffer data)
  28. : m_size(size)
  29. , m_data(move(data))
  30. {
  31. }
  32. IntSize m_size;
  33. ByteBuffer m_data;
  34. };
  35. inline CMYK* CMYKBitmap::scanline(int y)
  36. {
  37. VERIFY(y >= 0 && y < m_size.height());
  38. return reinterpret_cast<CMYK*>(m_data.data() + y * m_size.width() * sizeof(CMYK));
  39. }
  40. inline CMYK const* CMYKBitmap::scanline(int y) const
  41. {
  42. VERIFY(y >= 0 && y < m_size.height());
  43. return reinterpret_cast<CMYK const*>(m_data.data() + y * m_size.width() * sizeof(CMYK));
  44. }
  45. inline CMYK* CMYKBitmap::begin()
  46. {
  47. return reinterpret_cast<CMYK*>(m_data.data());
  48. }
  49. inline CMYK* CMYKBitmap::end()
  50. {
  51. return reinterpret_cast<CMYK*>(m_data.data() + m_data.size());
  52. }
  53. }