STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ
    Nội dung
    0
    0
    Chia sẻ

    Các Thao Tác Kinh Điển với Mảng 2 Chiều và Ứng Dụng

    Ứng dụng mảng 2 chiều vào thực tế thông qua ví dụ xoay ảnh.
    23/05/2017 20/09/2020 2 phút đọc
    Các Thao Tác Kinh Điển với Mảng 2 Chiều và Ứng Dụng

    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

    Giao diện stdio picture handling

    Cách hoạt động

    Framework hỗ trợ xử lý mảng 2 chiều và 1 chiều

    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.

    Flip ảnh.

    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 - 1j < 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 }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;
    }

    Kết quả

    Kết quả sau khi flip mảng 2 chiều.
    0 Bình luận
    Modern C++

    Modern C++

    STDIO Training - Đào Tạo Lập Trình C++.

    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO

    Trang chính

    Công ty TNHH STDIO

    • 30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn
    • 383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012
    ©STDIO, 2013 - 2021