diff --git a/Libraries/LibGfx/PaintingSurface.cpp b/Libraries/LibGfx/PaintingSurface.cpp index a94b14ab621..42c3c66f372 100644 --- a/Libraries/LibGfx/PaintingSurface.cpp +++ b/Libraries/LibGfx/PaintingSurface.cpp @@ -101,6 +101,15 @@ void PaintingSurface::read_into_bitmap(Gfx::Bitmap& bitmap) m_impl->surface->readPixels(pixmap, 0, 0); } +void PaintingSurface::write_from_bitmap(Gfx::Bitmap& bitmap) +{ + auto color_type = to_skia_color_type(bitmap.format()); + auto alpha_type = bitmap.alpha_type() == Gfx::AlphaType::Premultiplied ? kPremul_SkAlphaType : kUnpremul_SkAlphaType; + auto image_info = SkImageInfo::Make(bitmap.width(), bitmap.height(), color_type, alpha_type); + SkPixmap const pixmap(image_info, bitmap.begin(), bitmap.pitch()); + m_impl->surface->writePixels(pixmap, 0, 0); +} + IntSize PaintingSurface::size() const { return m_impl->size; diff --git a/Libraries/LibGfx/PaintingSurface.h b/Libraries/LibGfx/PaintingSurface.h index eed6782a92c..9c489567850 100644 --- a/Libraries/LibGfx/PaintingSurface.h +++ b/Libraries/LibGfx/PaintingSurface.h @@ -32,6 +32,7 @@ public: #endif void read_into_bitmap(Bitmap&); + void write_from_bitmap(Bitmap&); IntSize size() const; IntRect rect() const;