2013-04-25 4 views
0

Я должен открыть с тем фактом, что я очень новичок в C++.Есть ли способ отображения матрицы символов в качестве изображения?

Я пытаюсь отобразить постоянно обновляющуюся матрицу символов 20x20. В настоящее время я показываю матрицу, использующую для циклов как cout (код ниже), но это невероятно мерцает - я ищу что-то более плавное.

Есть ли способ преобразовать эту матрицу символов в изображение и отобразить это?

Это мой первый вопрос здесь, поэтому я приношу свои извинения, если я сделал что-то не так!

код до сих пор:

#include <iostream> 
#include <cstdlib> 
#include <stdio.h> 
#include <stdlib.h> 
#include <windows.h> 

using namespace std; 

int main() 
{ 
    int randInt; 

    //Initialize matrix and location 
    int matrix[20][20]; 
    int location[2] = {0,0}; 
    for (int i=0; i<20; i++) 
    { 
      for (int j=0; j<20; j++) 
      { 
       matrix[i][j] = 1; 
      } 
    } 


    //move the X around 
    for (int i=0; i<100; i++) 
    { 
     cout << string(50, '\n'); 
     //Change the X's location 
     randInt = rand() % 4; 
     switch (randInt) 
     { 
      case 0: 
       if(location[1] > 0) 
        location[1] = location[1]-1; 
       break; 
      case 1: 
       if(location[0] < 20) 
        location[0] = location[0]+1; 
       break; 
      case 2: 
       if(location[1] < 20) 
        location[1] = location[1]+1; 
       break; 
      case 3: 
       if(location[0] > 0) 
        location[0] = location[0]-1; 
       break; 
      default: 
       cout << "Switch statement problem"; 
     } 
     //Display the matrix 
     for (int x=0; x<20; x++) 
     { 
      for (int y=0; y<20; y++) 
      { 
       if(x==location[0] && y==location[1]) 
        cout << "X"; 
       else 
        cout << matrix[x][y]; 
      } 
      cout << endl; 
     } 
     Sleep(100); 
    } 

system ("pause"); 
return 0; 
} 
+1

если вы используете UNIX, смотрите в проклятиях – didierc

+0

'систему ("пауза");' указывает Windows, и Visual Studio. Попробуйте Ctrl-F5 вместо вызова для паузы. – harper

+0

Вы пытаетесь отобразить записи матрицы в изображении (т. Е. Вы видите фактические числа), или просто пытаетесь понять, что находится в матрице по цвету, кодирующему числа (т.е. 0 является чисто черным и 255 чисто белый)? Если это последняя, ​​может оказаться полезной библиотека обработки изображений, такая как OpenCV. – lightalchemist

ответ

0

Вы должны переименовать location[2] что-то вроде `STRUCT {Int х, у; } местоположение для удобочитаемости.

Затем вы можете создать массив символов в ОЗУ и разобрать его сразу.

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    char matrix[20][20]; 
    char image[21][21]; 
    struct { int x, y; } location; 

    int x = 0; 
    int y = 0; 
    location.x = 7; 
    location.y = 3; 

    // fill the matrix 
    for (x = 0; x < 20; ++x) 
    { 
     for (y = 0; y < 20; ++y) 
     { 
      matrix[y][x] = 'a' + x + y; 
     } 
    } 

    // prepare the image 
    y = 0; 

    while (y < 20) 
    { 
     memcpy(image[y], matrix[y], 20); 
     image[y][20] = '\n'; 
     ++y; 
    } 

    // add the cross 
    image[location.y][location.x] = 'X'; 
    image[20][0] = '\0'; 

    // use the image   
    puts((char*)image); 
} 

Пожалуйста, добавьте в ваш выбор случайные функции.

0

Если вы хотите преобразовать символ в изображение и увидеть цвет, напишите значение char как пиксель в простом формате pgm.

Написать файл в этом формате образца

P2 
# feep.pgm 
24 7 
15 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0 
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0 
0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0 
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0 
0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

Проверить эту ссылку http://netpbm.sourceforge.net/doc/pgm.html для формата МПГ

Смежные вопросы