Nguyên nhân là các chương trình này khi chạy có sự hỗ trợ trực tiếp của CARD ĐỒ HỌA. chứ không phải gián tiếp như chtr của bạn. Cái chậm của bạn có lẽ là do giai đoạn vẽ.
Nếu bạn để ý khi cài Windows XP lên mà chưa cài Driver CARD đồ họa (có thể Windows vẫn hỗ trợ tới 32bit màu). Lúc này bạn hãy xem 1 vài bức ảnh chừng 800x600 bằng chương trình ImgView của Windows. Nó cũng bị như bạn đó. Rất chậm và giật.
Xử lý đồ họa thì bạn chỉ thực hiện trên bộ nhớ mà thôi. 20MB cấp phát không có gì là lâu và đó là giai đoạn bạn LOAD hình vào bộ nhớ. Quan trọng là phải giải mã được các file đồ họa này.
Còn sau đó muốn xử lý hiệu ứng thì chỉ làm trên buffer. Ví dụ 32bit là 1 pixel muốn hoán đổi pixel thì chỉ dịch chuyển, copy trên bộ nhớ này.. Quan trọng là các thuật toán này phải tối ưu. Còn vấn đề vẽ thì không thể Set từng Pixel ra màn hình được. Cho dù bạn có dùng 2 vùng đệm hoán đổi của GDI cũng rất chậm bởi vì nó là sự xử lý của CPU khi vẽ.
Muốn thể hiện phong to và thu nhỏ mà không chậm. Bạn có thể vận dụng các thư viện đồ họa cao cấp như OpenGL hay DirectX bởi vì nó là những thư viện tác động trực tiếp với Card đồ họa và công việc này sẽ do GPU (trong card đồ họa đản nhiệm).
Như vậy xử lý ảnh thì bạn làm trên Buffer. Còn vấn đề vẽ ra làm sao?
Bạn chỉ cần đưa nội dung của file ảnh (bắt buộc phải giải mã thành dạng *.tag không nén để đưa vào bộ nhớ Card Màn hình) và bạn sử dụng các hàm của OpenGL hoặc DirectX để thực hiện điều đó. Do đó nó sẽ mất bộ nhớ RAM của Driver Card chứ không phải RAM của máy tính. Sau đó GPU để đọc các pixel này để đưa lên màn hình. Các phép biến dổi cơ bản như Quay, Tỷ lệ (phóng to, thu nhỏ), Tịnh tiến,... đã được hỗ trợ bởi Card đồ họa, nếu vận dụng những cái này thì sẽ rất tối ưu và tôi bảo đảm với bạn là không hề chậm!
Có lẽ bạn cần tham khảo thêm công nghệ Texture của 2 lib này.
Download thử Demo này xem. Có lẽ hởi khó cho bạn vì nó là Visual C++ chứ không phải C++ Builder tuy nhiên 2 thằng này đều có chung OpenGL hay DX
Chúc bạn thành công.
Bookmarks