כיצד להוסיף תמונות לשקופיות PowerPoint ב‑C++
תמונות ב‑Aspose.Slides FOSS משולבות כמסגרות תמונה, צורות שמחזיקות תמונה וניתן למקם, לשנות גודל ולעצב אותן כמו כל צורה אחרת. נתוני התמונה נשמרים פעם אחת באוסף prs.images() ומופנים על‑ידי המסגרת.
דרישות מקדימות
git clone https://github.com/aspose-slides-foss/Aspose.Slides-FOSS-for-Cpp.git
cd Aspose.Slides-FOSS-for-Cpp && mkdir build && cd build
cmake .. && cmake --build .הוסף תמונה מקובץ
#include <Aspose/Slides/Foss/presentation.h>
#include <fstream>
#include <vector>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
auto& slide = prs.slides()[0];
// Load image into the presentation's image collection
std::ifstream file("photo.jpg", std::ios::binary);
std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
auto& img = prs.images().add_image(data);
// Add a picture frame at (x=50, y=50, width=400, height=300) in points
slide.shapes().add_picture_frame(
asf::ShapeType::RECTANGLE, 50, 50, 400, 300, img);
prs.save("with-image.pptx", asf::SaveFormat::PPTX);
return 0;
}החתימה add_picture_frame:
add_picture_frame(shape_type, x, y, width, height, image) -> PictureFrame&כל הממדים הם בנקודות (נקודה אחת = 1/72 אינץ’). לשקופית סטנדרטית של 10 × 7.5 אינץ’ מרחב הקואורדינטות הוא 720 × 540 נקודות.
הוסף תמונה ממאגר זיכרון
אם כבר יש לך את התמונה כבייטים (למשל, הורדה מרשת או קריאה ממסד נתונים):
#include <Aspose/Slides/Foss/presentation.h>
#include <vector>
int main() {
namespace asf = Aspose::Slides::Foss;
// Assume image_bytes is populated from some source
std::vector<uint8_t> image_bytes = /* ... */;
asf::Presentation prs;
auto& img = prs.images().add_image(image_bytes);
prs.slides()[0].shapes().add_picture_frame(
asf::ShapeType::RECTANGLE, 200, 100, 300, 200, img);
prs.save("logo-slide.pptx", asf::SaveFormat::PPTX);
return 0;
}שלוט במצב המילוי
הpicture_format() על PictureFrame שולט איך התמונה ממלאת את גבולות המסגרת:
#include <Aspose/Slides/Foss/presentation.h>
#include <fstream>
#include <vector>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs;
std::ifstream file("texture.png", std::ios::binary);
std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
auto& img = prs.images().add_image(data);
auto& frame = prs.slides()[0].shapes().add_picture_frame(
asf::ShapeType::RECTANGLE, 50, 50, 600, 350, img);
// STRETCH: scale image to fill the frame exactly (default)
frame.picture_format().set_picture_fill_mode(asf::PictureFillMode::STRETCH);
// TILE: repeat the image in a grid pattern
// frame.picture_format().set_picture_fill_mode(asf::PictureFillMode::TILE);
prs.save("filled.pptx", asf::SaveFormat::PPTX);
return 0;
}PictureFillMode | התנהגות |
|---|---|
STRETCH | שנה את גודל התמונה כך שתמלא את המסגרת, בהתעלמות ממד היחס |
TILE | חזור על התמונה כתבנית מרוצפת |
הוסף תמונות מרובות לשקופיות שונות
#include <Aspose/Slides/Foss/presentation.h>
#include <fstream>
#include <vector>
#include <string>
#include <filesystem>
int main() {
namespace asf = Aspose::Slides::Foss;
std::vector<std::string> image_files = {"slide1.jpg", "slide2.jpg", "slide3.jpg"};
asf::Presentation prs;
auto& layout = prs.slides()[0].layout_slide();
// Ensure enough slides exist
while (prs.slides().size() < image_files.size()) {
prs.slides().add_empty_slide(layout);
}
for (size_t i = 0; i < image_files.size(); ++i) {
if (!std::filesystem::exists(image_files[i])) continue;
std::ifstream file(image_files[i], std::ios::binary);
std::vector<uint8_t> data((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
auto& img = prs.images().add_image(data);
prs.slides()[i].shapes().add_picture_frame(
asf::ShapeType::RECTANGLE, 0, 0, 720, 540, img);
}
prs.save("multi-image.pptx", asf::SaveFormat::PPTX);
return 0;
}ספירת תמונות במצגת קיימת
#include <Aspose/Slides/Foss/presentation.h>
#include <iostream>
int main() {
namespace asf = Aspose::Slides::Foss;
asf::Presentation prs("with-image.pptx");
std::cout << "Presentation contains " << prs.images().size() << " image(s)\n";
return 0;
}אוסף prs.images() משותף לכל השקופיות: בתים של אותה תמונה נשמרים פעם אחת גם אם מסגרת התמונה מופיעה בכמה שקופיות.