GraphicsBitmap.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #pragma once
  2. #include "Color.h"
  3. #include "Rect.h"
  4. #include "Size.h"
  5. #include <AK/Retainable.h>
  6. #include <AK/RetainPtr.h>
  7. #include <AK/AKString.h>
  8. #include <SharedBuffer.h>
  9. class GraphicsBitmap : public Retainable<GraphicsBitmap> {
  10. public:
  11. enum class Format { Invalid, RGB32, RGBA32 };
  12. static Retained<GraphicsBitmap> create(Format, const Size&);
  13. static Retained<GraphicsBitmap> create_wrapper(Format, const Size&, RGBA32*);
  14. static RetainPtr<GraphicsBitmap> load_from_file(Format, const String& path, const Size&);
  15. static RetainPtr<GraphicsBitmap> create_with_shared_buffer(Format, Retained<SharedBuffer>&&, const Size&);
  16. ~GraphicsBitmap();
  17. RGBA32* scanline(int y);
  18. const RGBA32* scanline(int y) const;
  19. Rect rect() const { return { {}, m_size }; }
  20. Size size() const { return m_size; }
  21. int width() const { return m_size.width(); }
  22. int height() const { return m_size.height(); }
  23. size_t pitch() const { return m_pitch; }
  24. int shared_buffer_id() const { return m_shared_buffer ? m_shared_buffer->shared_buffer_id() : -1; }
  25. bool has_alpha_channel() const { return m_format == Format::RGBA32; }
  26. private:
  27. GraphicsBitmap(Format, const Size&);
  28. GraphicsBitmap(Format, const Size&, RGBA32*);
  29. GraphicsBitmap(Format, Retained<SharedBuffer>&&, const Size&);
  30. Size m_size;
  31. RGBA32* m_data { nullptr };
  32. size_t m_pitch { 0 };
  33. Format m_format { Format::Invalid };
  34. bool m_mmaped { false };
  35. RetainPtr<SharedBuffer> m_shared_buffer;
  36. };
  37. inline RGBA32* GraphicsBitmap::scanline(int y)
  38. {
  39. return reinterpret_cast<RGBA32*>((((byte*)m_data) + (y * m_pitch)));
  40. }
  41. inline const RGBA32* GraphicsBitmap::scanline(int y) const
  42. {
  43. return reinterpret_cast<const RGBA32*>((((const byte*)m_data) + (y * m_pitch)));
  44. }