我想知道是否有人可以帮助我... 我需要显示我的图像15秒,我还必须使用draw_text函数在图像上显示一些带有int值的细节,并且它要求const char * const文本值。 我不应该添加库,只有iostream,当然还有CImg。
这是我一直试图使用的当前代码。
CImg<unsigned char> image(filename);
unsigned char red[] = { 255,0,0 };
unsigned char blue[] = { 0,0,255 };
image.draw_text(5,5,"Here i want to call the int value",red,blue,1,10);
if (opcion == 0x33)
{
//Here i want to display the following line for 15 seconds
image.display("hello world");
}
答案 0 :(得分:0)
我不确定你的问题是关于将整数变成字符串,还是关于显示图像15秒。但是,以下代码应该向您展示两种方法。
主要的是主循环等待事件的时间长达100毫秒,如果你这样做150次,你的屏幕将显示大约15秒。
#include <iostream>
#include "CImg.h"
using namespace std;
using namespace cimg_library;
#define BUFSIZE 128
int main(int argc, char** const argv)
{
// Create empty yellow image
CImg<unsigned char> image(256,256,1,3);
cimg_forXY(image,x,y) { image(x,y,0,0)=255; image(x,y,0,1)=255; image(x,y,0,2)=0; }
unsigned char red[] = { 255,0,0 };
unsigned char blue[] = { 0,0,255 };
char text[BUFSIZE];
int someInt=42;
snprintf(text,BUFSIZE,"Hello, the integer is %d",someInt);
image.draw_text(5,5,text,red,blue,1,10);
CImgDisplay main_disp(image,"Hello world");
// Loop 150 times @100ms each
for(int i=0;i<150;i++){
if(main_disp.is_closed()){break;}
main_disp.wait(100);
}
}
还有其他更多的C ++方法可以将整数转换为字符串,但是这种方法可以让你开始。
运行15秒的方法也很粗糙,但我怀疑它只需要15秒。您可以在程序开始时使用time()
获得时间,然后在每次通过循环时再次获取时间并在差异超过15时中断 - 但这比上面的简单方法稍微清楚一点。该代码可能如下所示:
#include <iostream>
#include <ctime>
#include "CImg.h"
using namespace std;
using namespace cimg_library;
#define BUFSIZE 128
int main(int argc, char** const argv)
{
// Create empty yellow image
CImg<unsigned char> image(256,256,1,3);
cimg_forXY(image,x,y) { image(x,y,0,0)=255; image(x,y,0,1)=255; image(x,y,0,2)=0; }
unsigned char red[] = { 255,0,0 };
unsigned char blue[] = { 0,0,255 };
char text[BUFSIZE];
int someInt=42;
snprintf(text,BUFSIZE,"Hello, the integer is %d",someInt);
image.draw_text(5,5,text,red,blue,1,10);
CImgDisplay main_disp(image,"Hello world");
time_t start,diff;
start=time(NULL);
// Loop till display closed or 15 seconds elapsed
while(1){
// Exit if closed
if(main_disp.is_closed()){break;}
// Exit if 15 seconds are up
diff=time(NULL)-start;
if(diff>15){break;}
main_disp.wait(10);
}
}
您可以使用更多C ++方式执行字符串操作:
#include <iostream>
#include <sstream>
#include <ctime>
#include <string>
#include "CImg.h"
using namespace std;
using namespace cimg_library;
int main(int argc, char** const argv)
{
// Create empty yellow image
CImg<unsigned char> image(256,256,1,3);
cimg_forXY(image,x,y) { image(x,y,0,0)=255; image(x,y,0,1)=255; image(x,y,0,2)=0; }
unsigned char red[] = { 255,0,0 };
unsigned char blue[] = { 0,0,255 };
int someInt=42;
string text="The integer is: ";
text += to_string(someInt);
image.draw_text(5,5,text.c_str(),red,blue,1,10);
CImgDisplay main_disp(image,"Hello world");
time_t start,diff;
start=time(NULL);
// Loop till display closed or 15 seconds elapsed
while(1){
// Exit if closed
if(main_disp.is_closed()){break;}
// Exit if 15 seconds are up
diff=time(NULL)-start;
if(diff>15){break;}
main_disp.wait(10);
}
}