2016-09-22 2 views
0

Мне было интересно, может ли кто-нибудь помочь мне с этим ... Мне нужно отобразить мое изображение в течение 15 секунд, и мне также нужно использовать функцию draw_text для отображения на изображении некоторые детали с int value, и он запрашивает значение const char * const text. Я не должен добавлять библиотеки, только iostream и, конечно, CImg.Как показать временное изображение с библиотекой 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

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