diff options
author | Pierre <pierre.git@posteo.de> | 2021-01-22 11:55:26 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-01-22 20:39:25 +0100 |
commit | 8e265b512a3385b8494187e05132d7be90c4a340 (patch) | |
tree | 457dfd33f94455edac0ba7f5ff89150e79824605 | |
parent | a1d773960723dcd6395bef4c4e5eecf4fe3c68e3 (diff) | |
download | serenity-8e265b512a3385b8494187e05132d7be90c4a340.zip |
PixelPaint: adding an option to export as PNG
-rw-r--r-- | Userland/Applications/PixelPaint/Image.cpp | 14 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/Image.h | 1 | ||||
-rw-r--r-- | Userland/Applications/PixelPaint/main.cpp | 14 |
3 files changed, 29 insertions, 0 deletions
diff --git a/Userland/Applications/PixelPaint/Image.cpp b/Userland/Applications/PixelPaint/Image.cpp index 09a075dfe0..01f202cce4 100644 --- a/Userland/Applications/PixelPaint/Image.cpp +++ b/Userland/Applications/PixelPaint/Image.cpp @@ -34,6 +34,7 @@ #include <LibGUI/Painter.h> #include <LibGfx/BMPWriter.h> #include <LibGfx/ImageDecoder.h> +#include <LibGfx/PNGWriter.h> #include <stdio.h> //#define PAINT_DEBUG @@ -153,6 +154,19 @@ void Image::export_bmp(const String& file_path) fclose(file); } +void Image::export_png(const String& file_path) +{ + auto bitmap = Gfx::Bitmap::create(Gfx::BitmapFormat::RGBA32, m_size); + GUI::Painter painter(*bitmap); + paint_into(painter, { 0, 0, m_size.width(), m_size.height() }); + + Gfx::PNGWriter png_writer; + auto png = png_writer.write(bitmap); + auto file = fopen(file_path.characters(), "wb"); + fwrite(png.data(), sizeof(u8), png.size(), file); + fclose(file); +} + void Image::add_layer(NonnullRefPtr<Layer> layer) { for (auto& existing_layer : m_layers) { diff --git a/Userland/Applications/PixelPaint/Image.h b/Userland/Applications/PixelPaint/Image.h index 63184b3ad3..858c2381e1 100644 --- a/Userland/Applications/PixelPaint/Image.h +++ b/Userland/Applications/PixelPaint/Image.h @@ -70,6 +70,7 @@ public: void paint_into(GUI::Painter&, const Gfx::IntRect& dest_rect); void save(const String& file_path) const; void export_bmp(const String& file_path); + void export_png(const String& file_path); void move_layer_to_front(Layer&); void move_layer_to_back(Layer&); diff --git a/Userland/Applications/PixelPaint/main.cpp b/Userland/Applications/PixelPaint/main.cpp index df581829e6..9c054a67dd 100644 --- a/Userland/Applications/PixelPaint/main.cpp +++ b/Userland/Applications/PixelPaint/main.cpp @@ -160,6 +160,20 @@ int main(int argc, char** argv) image_editor.image()->export_bmp(save_path.value()); }, window)); + export_submenu.add_action( + GUI::Action::create( + "As PNG", [&](auto&) { + if (!image_editor.image()) + return; + + Optional<String> save_path = GUI::FilePicker::get_save_filepath(window, "untitled", "png"); + + if (!save_path.has_value()) + return; + + image_editor.image()->export_png(save_path.value()); + }, + window)); app_menu.add_separator(); app_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) { |