Я не уверен, является ли ваш вопрос о получении целого числа в строку или о отображении изображения в течение 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);
}
}