Trabalhar com imagens em apresentações Aspose.Slides FOSS para C++
Aspose.Slides FOSS for C++ lets you embed images in a presentation’s shared image collection and display them on slides using PictureFrame imagens também podem ser usadas como forma de fundo preenche via FillType::PICTURE.
Adicionar uma imagem de um arquivo
Carregar bytes de imagem do disco e adicioná-los à coleção de fotos da apresentação com pres.images().add_image().Depois coloque a imagem num slide como um PictureFrame:
#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/image_collection.h>
#include <Aspose/Slides/Foss/picture_frame.h>
#include <Aspose/Slides/Foss/pp_image.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>
#include <cstdint>
#include <fstream>
#include <iterator>
#include <vector>
using namespace Aspose::Slides::Foss;
int main() {
Presentation pres;
// Add the image to the shared collection
std::ifstream f("logo.png", std::ios::binary);
std::vector<std::uint8_t> data(
(std::istreambuf_iterator<char>(f)),
std::istreambuf_iterator<char>());
auto& img = pres.images().add_image(data);
// Place it on the slide as a PictureFrame
pres.slides()[0].shapes().add_picture_frame(
ShapeType::RECTANGLE, 50, 50, 300, 200, img);
pres.save("with-image.pptx", SaveFormat::PPTX);
return 0;
}Os quatro argumentos de posição para a add_picture_frame() são: x, y, width, height em pontos.
Adicionando uma imagem de um vetor byte
Se já tiver bytes de imagem na memória (por exemplo, baixados a partir de uma URL ou lidos a um banco de dados), passe-os diretamente para o add_image():
#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/image_collection.h>
#include <Aspose/Slides/Foss/pp_image.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>
#include <cstdint>
#include <fstream>
#include <iterator>
#include <vector>
using namespace Aspose::Slides::Foss;
int main() {
// Simulate having bytes in memory
std::ifstream f("photo.jpg", std::ios::binary);
std::vector<std::uint8_t> image_bytes(
(std::istreambuf_iterator<char>(f)),
std::istreambuf_iterator<char>());
Presentation pres;
auto& img = pres.images().add_image(image_bytes);
pres.slides()[0].shapes().add_picture_frame(
ShapeType::RECTANGLE, 100, 80, 400, 250, img);
pres.save("from-bytes.pptx", SaveFormat::PPTX);
return 0;
}Posicionamento e tamanho de um quadro fotográfico
A Comissão PictureFrame devolvido por: add_picture_frame() herda tudo. Shape Propriedades geométricas e podem ser reposicionados após a criação:
#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/image_collection.h>
#include <Aspose/Slides/Foss/picture_frame.h>
#include <Aspose/Slides/Foss/pp_image.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>
#include <cstdint>
#include <fstream>
#include <iterator>
#include <vector>
using namespace Aspose::Slides::Foss;
int main() {
Presentation pres;
std::ifstream f("photo.jpg", std::ios::binary);
std::vector<std::uint8_t> data(
(std::istreambuf_iterator<char>(f)),
std::istreambuf_iterator<char>());
auto& img = pres.images().add_image(data);
auto& pf = pres.slides()[0].shapes().add_picture_frame(
ShapeType::RECTANGLE, 0, 0, 100, 100, img);
// Reposition and resize after creation
pf.set_x(50);
pf.set_y(100);
pf.set_width(350);
pf.set_height(250);
pres.save("positioned.pptx", SaveFormat::PPTX);
return 0;
}Usar uma imagem como um preenchimento de forma
Qualquer forma (não apenas PictureFrame) pode usar uma imagem como seu preenchimento de fundo. Set fill_type a) para o FillType::PICTURE e atribuir a imagem ao formato de preenchimento da imag em:
#include <Aspose/Slides/Foss/auto_shape.h>
#include <Aspose/Slides/Foss/export/save_format.h>
#include <Aspose/Slides/Foss/fill_format.h>
#include <Aspose/Slides/Foss/fill_type.h>
#include <Aspose/Slides/Foss/image_collection.h>
#include <Aspose/Slides/Foss/picture_fill_mode.h>
#include <Aspose/Slides/Foss/pp_image.h>
#include <Aspose/Slides/Foss/presentation.h>
#include <Aspose/Slides/Foss/shape_collection.h>
#include <Aspose/Slides/Foss/shape_type.h>
#include <Aspose/Slides/Foss/slide.h>
#include <Aspose/Slides/Foss/slide_collection.h>
#include <cstdint>
#include <fstream>
#include <iterator>
#include <vector>
using namespace Aspose::Slides::Foss;
int main() {
Presentation pres;
std::ifstream f("background.png", std::ios::binary);
std::vector<std::uint8_t> data(
(std::istreambuf_iterator<char>(f)),
std::istreambuf_iterator<char>());
auto& img = pres.images().add_image(data);
auto& slide = pres.slides()[0];
auto& shape = slide.shapes().add_auto_shape(
ShapeType::ROUND_CORNER_RECTANGLE, 50, 50, 400, 250);
shape.fill_format().set_fill_type(FillType::PICTURE);
shape.fill_format().picture_fill_format().set_picture_fill_mode(PictureFillMode::STRETCH);
shape.fill_format().picture_fill_format().picture().set_image(&img);
pres.save("picture-fill.pptx", SaveFormat::PPTX);
return 0;
}PictureFillMode::STRETCH escala a imagem para preencher toda a forma. Use TILE para a repetição de padrões.