2012-06-13 40 views
5

Vì vậy, tôi đã thực hiện chương trình này cho một trò chơi và cần trợ giúp để làm cho nó tự động hơn một chút.Thao tác hình ảnh C++

Chương trình sẽ chụp ảnh và sau đó hiển thị nó. Tôi đang làm điều này trên kết cấu trong OpenGL. Khi tôi chụp ảnh màn hình của trò chơi, nó thường là khoảng 700x400. Tôi nhập chiều cao và chiều rộng vào chương trình của tôi, thay đổi kích thước hình ảnh thành 1024x1024 (làm cho nó trở thành một kết cấu POT cho khả năng tương thích tốt hơn) bằng cách thêm không gian trống (ảnh gốc ở góc trên bên trái và đi tới (700,400) và phần còn lại chỉ là trống, không ai biết thuật ngữ này?) và sau đó tải nó vào chương trình của tôi và điều chỉnh các góc để chỉ một phần từ (0,0) đến (700,400) được hiển thị.

Đó là cách tôi xử lý hiển thị hình ảnh. Bây giờ, tôi muốn thực hiện điều này tự động. Vì vậy, tôi muốn có một hình ảnh 700x400, vượt qua nó để chương trình mà sẽ nhận được chiều rộng và chiều cao của hình ảnh (700x400), thay đổi kích thước nó để 1024x1024 bằng cách thêm không gian trống và sau đó tải nó.

Vì vậy, có ai biết thư viện C++ có khả năng thực hiện việc này không? Tôi vẫn sẽ chụp ảnh màn hình theo cách thủ công.

Tôi đang sử dụng Thư viện hình ảnh OpenGL đơn giản (SOIL) để tải ảnh (.bmp) và chuyển đổi nó thành kết cấu.

Cảm ơn!

Trả lời

1

Bạn không thực sự phải thay đổi kích thước bằng cách thêm khoảng trống để hiển thị hình ảnh đúng cách. Trong thực tế, nó thực sự là cách không hiệu quả để làm điều đó, đặc biệt là vì bạn lưu trữ hình ảnh ở định dạng .bmp.

SOIL có thể tự động thêm không gian trống khi tải họa tiết - có thể chỉ cần tải tệp dưới dạng, mà không thực hiện bất kỳ thao tác nào.

Từ Documentation ĐẤT:

có thể tự động rescale hình ảnh với sức mạnh-of-hai kích thước lớn nhất tiếp theo

thể tải kết cấu hình chữ nhật cho các yếu tố GUI hoặc màn hình splash (yêu cầu GL_ARB/EXT/NV_texture_rectangle)

Dù sao, bạn không phải sử dụng kết cấu để hiển thị pixel trên s creen. Tôi đoán bạn không sử dụng trình đổ bóng để hiển thị - nếu tất cả đều đi qua đường ống cố định, có chức năng glDrawPixels, điều này sẽ đơn giản hơn nhiều. Chỉ cần nhớ thay đổi cuộc gọi SOIL của bạn thành SOIL_load_image.

+0

"Có thể tự động rescale hình ảnh sang kích cỡ lớn nhất của hai kích thước tiếp theo" - Tôi thực sự đã bỏ lỡ từ "tự động". : D Tôi sẽ thử những gì bạn nói. Cảm ơn! – Tuntuni

+0

Tôi đã cố gắng tải nó mà không thay đổi kích thước nhưng nó chỉ trở nên kỳ lạ. Tôi khá chắc chắn các góc của tôi đang ở vị trí của họ. Hình ảnh cũng chuyển sang màu xám và khi tôi mở rộng nó, nó sẽ thu được một số màu sắc. Bạn có thể cho tôi bất kỳ ngoại lệ nào trên SOIL_load_image và glDrawPixels hoặc liên kết không? Cảm ơn. – Tuntuni

+0

Có thể thử 'SOIL_FLAG_POWER_OF_TWO' hoặc' SOIL_FLAG_TEXTURE_RECTANGLE'. –