将较小的PNG文件组合在C 中的较大PNG文件中
Combine smaller png files in a larger png file in C++
我有一堆已知大小的PNG图像,这些图像是较大图像的一部分。我知道要放置图像以构建整个图像的位置,即,我知道每个子图像的左上坐标。如何在C 中构造较大的图像?有没有可以为我做到这一点的图书馆?链接到任何示例代码也很棒。
尝试ImageMagick,特别是magick api。
如果您仅针对一个平台(例如Windows(,则可能有简单的解决方案不需要库。
您可以使用CIMG库。这是一个轻巧的库,由几个文件组成。主文件是 cimg.h 。
有 draw_image 函数,它在当前图像上绘制另一个图像 - 这正是您需要的。
这是声明:
template<typename T>
struct CImg {
// ..... other code
//! Draw an image overloading.
template<typename t>
CImg<T>& draw_image(const int x0, const int y0, const CImg<t>& sprite, const float opacity=1);
// ..... other code
};
(x0 = width pos,y0 =行位置是原始图像中要绘制 sprite image的起始位置。
您可以尝试OpenCV
。
首先,您必须打开所有小文件(在此处的教程中解释(并将它们存储为cv::Mat
s。所有小图像都打开后,您可以通过将它们复制到指定区域来将它们全部放在更大的图像中。
完成完成这些图像后,只需在上面的链接中使用imwrite
即可将新图像保存到PNG文件。
示例代码将图像放在地点放在另一个旁边(因此最大行数(:
#include <cv.h>
#include <highgui.h>
#include <opencv2/opencv.hpp>
int main(int argc, char *argv[])
{
// check if arguments were given correctly
cv::Mat img1 = cv::imread(argv[1]);
cv::Mat img2 = cv::imread(argv[2]);
// load more images if necessary
// If images have alpha channel then use CV_8UC4
cv::Mat whole = cv::Mat((img1.rows<img2.rows?img2.rows:img1.rows), img1.cols+img2.cols, CV_8UC3);
img1.copyTo(whole(cv::Rect(0, 0, img1.cols, img1.rows)));
img2.copyTo(whole(cv::Rect(img1.cols, 0, img2.cols, img2.rows)));
// add more images if necessary
imwrite("whole.png", whole);
return 0;
}
相关文章:
- 从存储为 Windows 资源 (c++) 的 png 中获取 png 文件数据
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 如何启用libMagick++以保存.png文件格式
- 无法在CLion(macOS)上打开带有CImg的.png文件
- 尝试使用 CPP 在一个 Qt 窗口中显示多个 png 文件
- 我正在尝试SDL_DisplayFormat一个.png文件,我想,我可能缺少依赖项
- 从.ppm转换为.png文件
- 未找到"png.h"文件,当包含在Qt小部件项目中时
- 将较小的PNG文件组合在C 中的较大PNG文件中
- 使用膨胀来解压缩 png 文件
- 从 cin 读取 PNG 文件
- 以编程方式馈送 KML 文件并检索/生成.png文件
- SDL_Image libpng 错误:不是 PNG 文件
- 使用 C++、libpng 和 OpenMP 并行创建 PNG 文件
- 使用 boost.gil 逐像素读取.png文件
- Visual Studio 2012(C++)-使用附带的.png文件
- 0x00000000处的访问冲突正在使用SDL_image库加载PNG文件
- 需要从png文件中读取数据并将其保存到新文件中,如何?C++
- QT .png文件没有显示在屏幕上
- 如何使用c++从png文件中提取像素