2012-04-12 30 views
6

Hãy giúp tôi với kênh alpha trong HDC. Tôi làm cho HDC dc ném CreateCompatibleDC. Hơn gọi CreateDIBSection và có thể tìm thấy byte của hình ảnh trong bộ nhớ. Hơn gọi DrawFrameControl để dc này. Tất cả các công trình, nhưng trong bộ nhớ có 4 byte cho mỗi điểm ảnh và kênh alpha điền vào 00. Ngay cả khi có FF trước đó. Nhưng tôi cần kênh alpha. Làm thế nào tôi có thể làm cho DrawFrameControl đặt giá trị alpha thực hoặc chỉ không chạm vào chúng. Cảm ơn bạn. Và xin lỗi vì tiếng anh xấu: (Kênh Alpha trong DeviceContext (HDC)

Trả lời

7

Bạn không thể làm cho GDI không ghi vào byte alpha/dự trữ của bitmap bốn byte cho mỗi pixel. GDI không thực sự là nhận thức alpha, ngoại trừ một cặp vợ chồng Tuy nhiên, bạn có thể sử dụng kiến ​​thức mà nó viết và đặt lại alpha thành 0 để biết pixel nào được ghi là và sửa lỗi alpha theo cách thủ công sau đó

Để biết thêm thông tin, hãy đọc ba bài viết:

Hai đầu tiên có thể cung cấp cho bạn đầy đủ thông tin để đạt được những gì bạn muốn. Các bài viết này có cách tiếp cận chung để xử lý alpha với các chức năng GDI, bằng cách quét các điểm ảnh mà alpha bị ghi đè và sửa nó (và đi sâu vào các kỹ thuật nâng cao để vẽ nhiều thứ lên nhau, với alpha chính xác).) FrameRect vẽ hình chữ nhật trong đó các dòng là một đơn vị rộng và cao. Bạn có thể thấy nó hiệu quả hơn để vẽ bằng cách sử dụng các dòng, hoặc thậm chí trực tiếp chỉnh sửa bitmap pixel trong bộ nhớ, để vẽ các đường thẳng trong bộ nhớ. Điều đó tránh phải quét toàn bộ bitmap cho các pixel được GDI vẽ - sau khi tất cả, vì nó là một hình chữ nhật với các cạnh rộng một đơn vị, bạn biết chính xác các pixel nào sẽ được vẽ ra và có thể tự chỉnh sửa chúng.

Các vấn đề liên quan