C++ 使用CImg绘制三角形并使用插值填充颜色

C++ 使用CImg绘制三角形并使用插值填充颜色,c++,interpolation,cimg,C++,Interpolation,Cimg,我必须使用CImg构建图像,并使用中点算法绘制三角形,然后使用线性插值对边缘进行着色。我很难理解CImg库的语法 我现在只有一张黑色的空白图片 #include <iostream> #include "CImg/CImg.h" using namespace cimg_library; using namespace std; int main() { //Create an empty image CImg<unsigned char> triangle(

我必须使用CImg构建图像,并使用中点算法绘制三角形,然后使用线性插值对边缘进行着色。我很难理解CImg库的语法

我现在只有一张黑色的空白图片

#include <iostream>
#include "CImg/CImg.h"

using namespace cimg_library;
using namespace std;

int main() {
  //Create an empty image
  CImg<unsigned char> triangle(255, 255, 1, 3, 0);

  //Display and save filtered image
  CImgDisplay disp(triangle); 
  while (!disp.is_closed())
      disp.wait();   
  triangle.save("triangleInterpolation.bmp");  
}
#包括
#包括“CImg/CImg.h”
使用名称空间cimg_库;
使用名称空间std;
int main(){
//创建一个空图像
CImg三角形(255,255,1,3,0);
//显示并保存过滤后的图像
CImgDisplay disp(三角形);
而(!disp.is_closed())
disp.wait();
save(“triangleInterpolation.bmp”);
}


像这样的东西应该很好

#include <iostream>
#include <cstdlib>
#define cimg_display 0
#include "CImg.h"

using namespace cimg_library;
using namespace std;

int main() {
   // Create 256x256 with radial gradient
   CImg<unsigned char> image(256,256,1,3,0);
   cimg_forXYC(image,x,y,c) {image(x,y,0,c) = 255-(unsigned char)hypot((float)(128-x),(float)(128-y)); }

   // Now overlay a partially opaque 2D interpolated filled triangle for fun
   unsigned char cyan[]    = { 0, 255, 255 };
   unsigned char magenta[] = { 255, 0, 255 };
   unsigned char yellow[]  = { 255, 255, 0 };

   const float opacity=0.6;
   image.draw_triangle(
      10,10,       // 1st vertex x,y
      245,10,      // 2nd vertex x,y
      245,245,     // 3rd vertex x,y 
      cyan,        // 1st vertex colour
      magenta,     // 2nd vertex colour
      yellow,      // 3rd vertex colour
      opacity);

   // Save result image as NetPBM PNM - no libraries required
   image.save_pnm("result.pnm");
}
#包括
#包括
#定义cimg_显示0
#包括“CImg.h”
使用名称空间cimg_库;
使用名称空间std;
int main(){
//创建带径向渐变的256x256
CImg图像(256256,1,3,0);
cimg_forXYC(image,x,y,c){image(x,y,0,c)=255-(无符号字符)hypot((float)(128-x),(float)(128-y));}
//现在覆盖一个部分不透明的2D插值填充三角形以获得乐趣
无符号字符青色[]={0,255,255};
无符号字符洋红色[]={255,0,255};
无符号字符黄色[]={255,255,0};
常量浮点不透明度=0.6;
image.draw_三角形(
10,10,//第一个顶点x,y
245,10,//第二个顶点x,y
245245,//第三个顶点x,y
青色,//第一顶点颜色
品红色,//第二顶点颜色
黄色,//第三顶点颜色
不透明度);
//将结果图像另存为NetPBM PNM-无需库
image.save_pnm(“result.pnm”);
}

很有效,谢谢。如果我不想要直角三角形,我只需要改变点的顶点?另外,如何实现线性插值和中点算法?你的方法很简单,比我的作业指导书更有意义。但是我想我应该一步一步地做这些算法。是的,只要改变顶点和颜色——这应该很容易。你也可以自己实现这个公式。只要看看我在上一个答案中链接的同一个维基百科页面,并使用与我编写代码相同的技术。