Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: [Help]Đồ họa trong TC++ 3.1 - mode XOR_PUT !!

  1. #1
    Ngày gia nhập
    03 2008
    Nơi ở
    Đà Nẵng city
    Bài viết
    40

    Wink [Help]Đồ họa trong TC++ 3.1 - mode XOR_PUT !!

    Mình đang tự học về đồ họa trong C++, đọc tới phần setwritemode nhưng chỉ hiểu sơ sài, trong đó nhắc đến kỹ thuật dùng mode XOR_PUT để tạo ảnh chuyển động , viết thử 2 CT ví dụ : tạo ảnh hình chữ nhật thu nhỏ, + hình tròn thu nhỏ, nhưng tuy dùng cùng 1 hàm setwritemode , lại có sự khác nhau rõ ràng khi xuất ra màn hình đồ họa, cái này ko hỉu vì sao, mấy bro giải thích dùm nhe.

    Code viết bằng TC++ 3.1
    Code hình chữ nhật thu nhỏ:
    C++ Code:
    1. #include <graphics.h>
    2. #include <dos.h>
    3. #include <conio.h>
    4.  
    5. void main()
    6. {
    7.     int mh = 0, mode = 0;
    8.     int x1,y1, x2,y2;
    9.     initgraph( &mh, &mode, "c:\\tc\\bgi");
    10.  
    11.     setbkcolor( BLACK );
    12.     setcolor( WHITE );
    13.     setwritemode( XOR_PUT );
    14.  
    15.     x1 = 0; y1 = 0;
    16.              x2 = getmaxx();
    17.              y2 = getmaxy();
    18.  
    19.     while( x1 < x2 && y1 < y2 )
    20.     {
    21.         rectangle( x1,y1, x2,y2 );
    22.         delay(50);
    23.         rectangle( x1++,y1++, x2--,y2-- );
    24.     }
    25.  
    26.     getch();
    27.     closegraph();
    28. }

    Code hình tròn thu nhỏ:
    C++ Code:
    1. #include <graphics.h>
    2. #include <dos.h>
    3. #include <conio.h>
    4.  
    5. void main()
    6. {
    7.     int mh = 0, mode = 0;
    8.     int r;
    9.     initgraph( &mh, &mode, "c:\\tc\\bgi");
    10.  
    11.     setbkcolor( BLACK );
    12.     setcolor( WHITE );
    13.     setwritemode( XOR_PUT );
    14.  
    15.     r = 240;
    16.  
    17.     while( r > 0)
    18.     {
    19.         circle( 320,240, r );
    20.         delay(50);
    21.         circle( 320,240, r--);
    22.     }
    23.  
    24.     getch();
    25.     closegraph();
    26. }

    Rồi, khác nhau ở chỗ, khi hcn thu nhỏ thì nó trả lại màu đen cho màn hình, hình tròn thì lại tô lun màu trắng lun, giải thích dùm đi .
    Đã được chỉnh sửa lần cuối bởi camping29 : 21-11-2008 lúc 01:23 PM.

  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Lí do là hàm vẽ hình tròn của thư viện đồ họa . Với cái hình chữ nhật thì các tọa độ điểm đều là nguyên cho nên lần nào dùng hàm vẽ rectangle cũng cho kết quả như nhau nên dùng cách vẽ chèn kiểu XOR_PUT sẽ xóa hình chữ nhật cũ --> trả lại màu đen cho màn hình . Hình tròn thì lại khác các điểm thuộc hình tròn không nguyên nên giải thuật vẽ hình tròn mà máy chọn sẽ là chọn điểm nguyên nào đó để vẽ sao cho hình tròn là "tròn" theo đúng nghĩa ( giải thuật vẽ hình tròn là Bresenham thì phải ) . Ý mình nói là giải thuật đó chỉ là tương đối có nghĩa là cùng với một hình tròn ( cùng tâm bán kính ) qua câu lệnh vẽ circle lại là hai hình khác nhau ( chỉ có một số điểm trên hai hình là giống nhau thôi còn lại là khác ) --> khi XOR_PUT chỉ có một phần hình tròn bị mất phần còn lại vẫn còn nên lưu lại màu trắng ( là màu viền hình tròn ) . Mod nào đi qua xem xem ý kiến của mình có đúng không .
    I'm superman

  3. #3
    Ngày gia nhập
    03 2008
    Nơi ở
    Đà Nẵng city
    Bài viết
    40

    trung ah, tui nghĩ ông nói đúng đó, khi thao tác với code hình tròn, tôi để ý thấy 1 số pixel trên màn hình bị xóa, tức là chuyển thành màu nền khi thực hiện XOR_PUT , có lẽ các pixel đó là pixel chung khi vẽ , còn lại là phần lớn ko xóa đc khi dùng XOR_PUT ( xóa ở đây là vẽ lại lần 2 cùng 1 điểm ảnh -> trả lại màu nền ).

    Cũng xin hỏi thêm là : các ứng dụng của OR_PUT, COPY_PUT, AND_PUT là gì, cái này trong giáo trình nói sơ sài, ko chỉ rõ ( GIáo trình C++ Phạm Văn ẤT - tôi đọc cái này vì đang làm việc trong đồ họa với TC++ và BC++, trong khi hầu hết e-book tiếng anh ko đề cập đến thư viện <graphics.h> của BC++ và TC++ )

Các đề tài tương tự

  1. Trả lời: 1
    Bài viết cuối: 13-07-2014, 08:06 AM
  2. vấn đề nút mode trong window form
    Gửi bởi socbay1001 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 08-11-2012, 03:14 PM
  3. Code game Con rắn trong Text mode
    Gửi bởi hirikarate trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 27-02-2010, 10:55 PM
  4. lấy địa chỉ của hàm Trong Kernel Mode không Export
    Gửi bởi Cpro trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 2
    Bài viết cuối: 29-03-2009, 07:51 PM
  5. lấy địa chỉ của hàm Trong Kernel Mode không Export
    Gửi bởi Cpro trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 29-03-2009, 07:51 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn