Sử dụng framework STDIO Picture Handling để nạp ảnh và ứng dụng các kiến thức xử lý mảng 2 chiều.
Giao diện STDIO Picture Handling
Cách hoạt động
Sau khi chạy chương trình, nhấn nút "Run" để xoay hình ảnh, việc xây dựng nút "Run" bên trong dựa trên ý tưởng của bài viết.
Ý tưởng
Điểm ảnh (pixel - viết tắt px) là đơn vị nhỏ nhất tạo nên hình ảnh, thường mang 1 màu duy nhất (với sự pha trộn các màu cơ bản). Xem mỗi điểm ảnh trong ảnh là 1 giá trị trong mảng, để xoay được ảnh phải thay đổi cách duyệt mảng.
Để dễ hiểu hơn, khởi tạo mảng 2 chiều và thực hiện quá trình Flip +90, hoặc Flip -90 thông qua vòng lặp.
Code flip ảnh
Phần code khai báo mảng
#include <stdio.h> int main() { int height = 3; int width = 5; int a[3][5]; a[0][0] = 8; a[0][1] = 7; a[0][2] = 6; a[0][3] = 2; a[0][4] = 8; a[1][0] = 5; a[1][1] = 4; a[1][2] = 1; a[1][3] = 5; a[1][4] = 3; a[2][0] = 2; a[2][1] = 3; a[2][2] = 1; a[2][3] = 4; a[2][4] = 9; return 0; }
Để xoay +90, sử dụng vòng lặp for
, với i = height - 1
và j < width
// Flip +90 for (j = 0; j < width; j++) { for (i = height - 1; i >= 0; i--) { printf("%d", a[i][j]); } printf("\n"); }
Sau khi vòng lặp bên trong thực hiện, i = { 2, 1, 0 }
và mỗi lần kết thúc vòng lặp i, thì vòng for ngoài sẽ tăng lên 1 giá trị, với j = { 0, 1, 2, 3, 4 }
// Flip -90 for (j = width - 1; j >= 0; j--) { for (i = 0; i < height; i++) { printf("%d", a[i][j]); } printf("\n"); }
Tiếp tục thực hiện việc xoay -90, với i = height
và j = width -1
hiện việc xoay với j = { 4, 3, 2, 1, 0 }
và i = { 0, 1, 2 }
Áp dụng vào STDIO Picture Handling framework
int* YourCode(int* input, int width, int height, int &out_width, int &out_height) { int size = width * height; int* pic; pic = new int[size]; int p = 0; // pic int i = 0; int j = 0; // Flip +90 for (j = 0; j < width; j++) { for (i = height - 1; i >= 0; i--) { *(pic + p) = *(input + (i*width + j)); p++; } } out_width = height; out_height = width; return pic; }