在 CIMG 中附加图像并保存在 stb_image_write 中无效
Append image in CIMG and save in stb_image_write not working
我正在使用 stb_image stb_image_write 和 CImg 以及以下代码
int width, height, bpp;
img = stbi_load(imgPath, &width, &height, &bpp, 3);
CImg<unsigned char> cimg(img, width, height, 1, bpp);
CImg<unsigned char> wimg(width, 10, 1, 3, 0);
cimg.append(wimg,'y');
cimg.display();
stbi_write_png("save.png", width, height, 3, cimg, width * 3);
它只是创建了 10 像素的黑线并附加到图像的底部,当我显示它时它工作正常但是当我保存它时显示扭曲
我需要在底部添加边框是我做错了什么还是有更好的方法?
Original
Saved
下面的代码可以很好地使用 stb 读取图像,在 cimg 中做一些更改并使用 stb 保存,它将小图像覆盖到大图像
int width, height, bpp;
int width2, height2, bpp2;
CImg<unsigned char> gradient(img1, bpp, width, height, 1);
CImg<unsigned char> overlay(img2, bpp2, width2, height2, 1);
CImg<unsigned char> gradient(img1, width, height, bpp, 1);
CImg<unsigned char> overlay(img2, width2, height2, bpp2, 1);
gradient.draw_image(0, 0, overlay);
stbi_write_png("gradient.png", width, height, 3, gradient, width * 3);
Overlay
好的,我按照 Mark Setchell 在关于交错的评论中提到的那样工作,所以我必须按照下面提到的 post
排列缓冲区结构
CImg library creates distorted images on rotation
所以如果我需要使用这三个库,我的代码将如下所示
int width, height, bpp;
setHeader();
img = stbi_load(imgPath, &width, &height, &bpp, 3);
//Load with stb type
CImg<unsigned char> cimg(img, bpp, width, height, 1);
//Convert cimg type
cimg.permute_axes("yzcx");
//Can work with all type of cimg functions
CImg<unsigned char> wimg(width, 10, 1, 3, 0);
cimg.append(wimg,'y');
//Convert back to stb type to save
cimg.permute_axes("cxyz");
stbi_write_png("save.png", width, height+10, 3, cimg, width * 3);
我正在使用 stb_image stb_image_write 和 CImg 以及以下代码
int width, height, bpp;
img = stbi_load(imgPath, &width, &height, &bpp, 3);
CImg<unsigned char> cimg(img, width, height, 1, bpp);
CImg<unsigned char> wimg(width, 10, 1, 3, 0);
cimg.append(wimg,'y');
cimg.display();
stbi_write_png("save.png", width, height, 3, cimg, width * 3);
它只是创建了 10 像素的黑线并附加到图像的底部,当我显示它时它工作正常但是当我保存它时显示扭曲
我需要在底部添加边框是我做错了什么还是有更好的方法?
Original
Saved
下面的代码可以很好地使用 stb 读取图像,在 cimg 中做一些更改并使用 stb 保存,它将小图像覆盖到大图像
int width, height, bpp;
int width2, height2, bpp2;
CImg<unsigned char> gradient(img1, bpp, width, height, 1);
CImg<unsigned char> overlay(img2, bpp2, width2, height2, 1);
CImg<unsigned char> gradient(img1, width, height, bpp, 1);
CImg<unsigned char> overlay(img2, width2, height2, bpp2, 1);
gradient.draw_image(0, 0, overlay);
stbi_write_png("gradient.png", width, height, 3, gradient, width * 3);
Overlay
好的,我按照 Mark Setchell 在关于交错的评论中提到的那样工作,所以我必须按照下面提到的 post
排列缓冲区结构CImg library creates distorted images on rotation
所以如果我需要使用这三个库,我的代码将如下所示
int width, height, bpp;
setHeader();
img = stbi_load(imgPath, &width, &height, &bpp, 3);
//Load with stb type
CImg<unsigned char> cimg(img, bpp, width, height, 1);
//Convert cimg type
cimg.permute_axes("yzcx");
//Can work with all type of cimg functions
CImg<unsigned char> wimg(width, 10, 1, 3, 0);
cimg.append(wimg,'y');
//Convert back to stb type to save
cimg.permute_axes("cxyz");
stbi_write_png("save.png", width, height+10, 3, cimg, width * 3);