void testApp::keyReleased(int key){ if (key == 'd') debug = !debug; if (key == 'f') ofToggleFullscreen(); if(key =='t'){ ofBuffer buffer; buffer = ofBufferFromFile("image_bytes"); printBitmap(100, 100, (uint8_t *)buffer.getBinaryBuffer()); } if(key == 'p') printBitmap(300, 20, adalogo_data); if(key == ' '){ takePicture(); } }
int* trace(int *startPoint, int* exitpoint, int width, int heigth, int** bitmap, int** visited, int* way){ static int depth; depth++; int x = startPoint[1]; int y = startPoint[0]; int routes[4] = {0, 0, 0, 0}; // 0 - вверх, 1 - вправо, 2 - вниз, 3 - влево int up[2] = {y-1, x}; //стартовые точки для передачи в дочерние функции int right[2] = {y, x+1}; int down[2] = {y+1, x}; int left[2] = {y, x-1}; int* result = NULL; usleep(1000); //проверка направлений if(visited[y-1][x] == 0) routes[0] = 1; //вверх if(visited[y][x+1] == 0) routes[1] = 1; //вправо if(visited[y+1][x] == 0) routes[2] = 1; //вниз if(visited[y][x-1] == 0) routes[3] = 1; //влево visited[y][x] = 1; //закрашиваем текущую точку if(y == exitpoint[0] && x == exitpoint[1]){ //записываем найденный выход в way increaseWay(way, x, y); printBitmap(bitmap, width, heigth, way, startPoint, exitpoint); return way; } if(routes[0] && result == NULL) result = trace(up, exitpoint, width, heigth, bitmap, visited, way); //скармливание дочерним функциям путей из текущей точки. if(routes[1] && result == NULL) result = trace(right, exitpoint, width, heigth, bitmap, visited, way); if(routes[2] && result == NULL) result = trace(down, exitpoint, width, heigth, bitmap, visited, way); if(routes[3] && result == NULL) result = trace(left, exitpoint, width, heigth, bitmap, visited, way); if(result != NULL){//записывываем текущую точку, если функция вызывалась на точке, пренадлежащей пути. increaseWay(way, x, y); printBitmap(bitmap, width, heigth, way, startPoint, exitpoint); } return result; //возвращаем NULL, если тупик, после путь от выхода. }
void Adafruit_Thermal::printBitmap(Stream *stream) { uint8_t tmp; uint16_t width, height; tmp = stream->read(); width = (stream->read() << 8) + tmp; tmp = stream->read(); height = (stream->read() << 8) + tmp; printBitmap(width, height, stream); }
void BMMS::mallocBMMS(void** pointer, unsigned int reqSize){ if(work){ *pointer = _mallocBMMS(reqSize); #ifdef _DEBUG printBitmap(); #endif }else cudaAssert(cudaMalloc((void**)pointer,reqSize));//cudaMalloc }
int main(){ int width, heigth, i; int* startPoint; int* exitPoint; int* way; int** bitmap; int** visited; getInput(&width, &heigth, &bitmap, &startPoint, &exitPoint); //передаем ссылки на массивы и переменные, чтобы ф-я могла в них писать visited = (int**) malloc(heigth * sizeof(int*)); for(i = 0; i < width; i++) visited[i] = (int*) malloc(width * sizeof(int)); visited = invert(bitmap, width, heigth); //инвертируем карту, чтобы присвоить стенкам статус посещенных точек. way = (int*) malloc(sizeof(int) * width * heigth); way[0] = 0; trace(startPoint, exitPoint, width, heigth, bitmap, visited, way); printBitmap(bitmap, width, heigth, way, startPoint, exitPoint); return 0; }