2009-02-10 36 views
7

Có bất kỳ lớp, phương thức nào trong thư viện .NET hay bất kỳ thuật toán nào nói chung, để thực hiện các phép biến đổi không affine không? (Ví dụ: biến đổi có liên quan đến nhiều hơn chỉ là luân chuyển, quy mô, dịch và cắt)Biến đổi hình ảnh không ảnh hưởng trong .NET

ví dụ .:

alt text http://i43.tinypic.com/2qlcyup.jpg

alt text http://www.last100.com/wp-content/uploads/2008/01/iphone-maps.jpg


Có một thuật ngữ để non-affine transformation s?

Trả lời

8

Tất cả các hình ảnh mẫu bạn đã đăng có thể được thực hiện bằng Méo tứ giác. Mặc dù tôi không thể nói chắc chắn rằng một biến dạng quad sẽ bao gồm tất cả các biến đổi không affine.

Đó là liên kết đến việc triển khai không tốt trong C# ... nó hoạt động nhưng chậm. Poke xung quanh Wikipedia cho nhiều tối ưu hóa khác nhau có sẵn cho các loại tính toán

http://www.vcskicks.com/image-distortion.html

-Neil

+1

"Mặc dù tôi không thể nói chắc chắn rằng một biến dạng quad sẽ bao gồm tất cả các biến đổi phi affine." Nó sẽ không, có rất nhiều, rất nhiều điều một biến dạng quad không thể làm. Nhưng đó là một khởi đầu tuyệt vời. – kquinn

8

Tôi không biết bất cứ điều gì tích hợp trong Net cho phép bạn làm biến đổi affine phi.

Tôi đoán bạn đang cố gắng có một số loại ánh xạ kết cấu 3D? Nếu đó là trường hợp bạn cần một biến đổi affine đồng nhất, mà không có sẵn trong. Net. Tôi cũng không nhận thức được bất kỳ cách tích hợp nào để biến các chuyển đổi pixel trong .Net.

Tuy nhiên, giải pháp hiện được bỏ phiếu có thể tốt cho những gì bạn đang cố gắng làm, chỉ cần lưu ý rằng nó sẽ không thực hiện hiệu chỉnh phối cảnh ra khỏi hộp.

Ví dụ:

alt text

Những hình ảnh trên bên trái được tạo ra bằng cách sử dụng quad đơn Distort thư viện được cung cấp bởi Neil N. Những hình ảnh trên bên phải được tạo ra bằng cách sử dụng quad đơn (hai tam giác trên thực tế) trong DirectX.

Điều này có thể không có tác động đến những gì bạn đang cố gắng làm, nhưng đây là điều cần lưu ý nếu bạn muốn làm công cụ 3D, nó sẽ trông rất lạ mà không cần ánh xạ chính xác.

+0

Không, chúng tôi có một chiếc iPod và tôi đã thấy khả năng kết nối trang. Và tôi đã ghê tởm rằng một thiết bị nhúng nhỏ, và đèn flash, không thể biến đổi lạ mắt - nhưng một Core2 Duo chạy hệ điều hành tiên tiến nhất trên thế giới thì không thể. –

+0

"... có thể làm * biến đổi lạ mắt ..." –

+0

Chỉ vì nó không có chức năng dựng sẵn để làm các biến đổi lạ mắt không có nghĩa là nó không thể làm được. Tôi đã nhìn thấy một số đồ họa tuyệt vời doen trong tinh khiết C# –

1

Bạn có thể thực hiện điều này trong wpf bằng cách sử dụng điều khiển Viewport3d và ma trận biến đổi không có affine. Việc hiển thị bitmap này một lần nữa có thể thú vị .... Tôi đã "cố định" bằng cách bao gồm một hình ảnh vô hình với hình ảnh giống như trên mặt phẳng được kết cấu của tôi ... (Ngoài ra, tôi đã phải làm việc tối đa vấn đề kích thước kết cấu bằng cách chia lên máy bay và cắt xén hình ảnh ...)

http://www.charlespetzold.com/blog/2007/08/060605.html

trong trường hợp của tôi, tôi muốn điều ngược lại điều này (chuyển điểm để tùy ý trên bong trở thành các góc của cửa sổ hình chữ nhật của tôi), đó là nghịch đảo của ma trận để làm điều ngược lại.

+0

Ồ, Charles Petzold cũng đăng cách làm điều này trong silverlight 3 bằng cách sử dụng Matrix3dProjection: http: //www.charlespetzold .com/blog/2009/07/Sử dụng-the-Matrix3DProjection-Class-in-Silverlight-3.html – sphereinabox

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