mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 07:07:34 +00:00
PixelPaint: adding an option to export as PNG
This commit is contained in:
parent
a1d7739607
commit
8e265b512a
3 changed files with 29 additions and 0 deletions
|
@ -34,6 +34,7 @@
|
||||||
#include <LibGUI/Painter.h>
|
#include <LibGUI/Painter.h>
|
||||||
#include <LibGfx/BMPWriter.h>
|
#include <LibGfx/BMPWriter.h>
|
||||||
#include <LibGfx/ImageDecoder.h>
|
#include <LibGfx/ImageDecoder.h>
|
||||||
|
#include <LibGfx/PNGWriter.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
//#define PAINT_DEBUG
|
//#define PAINT_DEBUG
|
||||||
|
@ -153,6 +154,19 @@ void Image::export_bmp(const String& file_path)
|
||||||
fclose(file);
|
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)
|
void Image::add_layer(NonnullRefPtr<Layer> layer)
|
||||||
{
|
{
|
||||||
for (auto& existing_layer : m_layers) {
|
for (auto& existing_layer : m_layers) {
|
||||||
|
|
|
@ -70,6 +70,7 @@ public:
|
||||||
void paint_into(GUI::Painter&, const Gfx::IntRect& dest_rect);
|
void paint_into(GUI::Painter&, const Gfx::IntRect& dest_rect);
|
||||||
void save(const String& file_path) const;
|
void save(const String& file_path) const;
|
||||||
void export_bmp(const String& file_path);
|
void export_bmp(const String& file_path);
|
||||||
|
void export_png(const String& file_path);
|
||||||
|
|
||||||
void move_layer_to_front(Layer&);
|
void move_layer_to_front(Layer&);
|
||||||
void move_layer_to_back(Layer&);
|
void move_layer_to_back(Layer&);
|
||||||
|
|
|
@ -160,6 +160,20 @@ int main(int argc, char** argv)
|
||||||
image_editor.image()->export_bmp(save_path.value());
|
image_editor.image()->export_bmp(save_path.value());
|
||||||
},
|
},
|
||||||
window));
|
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_separator();
|
||||||
app_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
|
app_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue