Forum Discussion
Altera_Forum
Honored Contributor
14 years agovoid save_image() //== store image on sdram
{ num_images++; unsigned char byte_r, byte_g, byte_b; int pixel; int x, y; // find next free slot int i; for (i = 0; i < MAX_NUM_IMAGES; i++) { if (!images.is_taken){
current_image = &images; break; } } if (prev_image == NULL) { current_image->prev = current_image; current_image->next = current_image; } else if (num_images == 2) { prev_image->prev = current_image; prev_image->next = current_image; current_image->prev = prev_image; current_image->next = prev_image; } else if (num_images >= 3) { current_image->prev = prev_image; current_image->next = prev_image->next; prev_image->next->prev = current_image; prev_image->next = current_image; } current_image->is_taken = 1; current_image->image_num = i; prev_image = current_image; printf("saving image: %d/%d\n", i, num_images); for (y = 0; y < IMG_Y_SIZE; y += 1) { for(x = 0; x < IMG_X_SIZE; x += 1) { // send request IOWR_16DIRECT(TV_TO_VGA_0_BASE, 4, 1); // set requested x and y positions IOWR_16DIRECT(TV_TO_VGA_0_BASE, 0, x); IOWR_16DIRECT(TV_TO_VGA_0_BASE, 2, y); // get pixel data pixel = IORD_16DIRECT(TV_TO_VGA_0_BASE, 6); // enter pixel data into image matrix byte_r = (unsigned char) (((pixel >> 11) & 0x1F) << 3); byte_g = (unsigned char) (((pixel >> 5) & 0x3F) << 2); byte_b = (unsigned char) (((pixel >> 0) & 0x1F) << 3); // save pixel saved_images[0][y][x] = byte_r;
saved_images[1][y][x] = byte_g; saved_images[i][2][y][x] = byte_b; } } printf("saved\n"); printf("number of images: %d\n", num_images); }