30/09/2018, 22:16
Biến bức ảnh từ hình chữ nhật kéo ra hình thang trong android
Chào mọi người. Mình đang làm 1 app android. Có liên quan để camera và hình ảnh. Mình muốn bức ảnh được chụp từ camera rồi sau khi lấy được bức ảnh thì có thể scale bức ảnh ra thành 1 hình thang với tỉ lệ độ dài các cạnh đã xác định trước. Bức ảnh bị biến dạng xấu cũng được. Mình vẫn chưa tìm được cách để biến bức ảnh đang ở khung hình chữ nhật mà trở thành hình thang được. Mong các bạn giúp đỡ !
Ảnh minh họa
Bài liên quan
Hoặc đại khái như vậy :
<img src="https://daynhauhoc.com//daynhauhoc.s3-ap-southeast-1.amazonaws.com/original/2X/3/36519e51c9be47aa6d42e58543f11144b9d64aea.png" width=“690” height=“394”
Dùng thuật toán tra trên Google.
thuật toán nào vậy bác ơi?
thử thế này xem sao
Đầu tiên từ ảnh AxB bạn phóng ảnh lên thành 2Ax2B
Sau đó xử lí pixels trên từng hàng
Tại hàng i bạn tính ra được số pixel bị mất đi mỗi bên là x, (ví dụ tại i=0 (hàng trên cùng) thì số pixel mất đi mỗi bên là b/2 ) sau đó tính lại pixel tại [i,j] = trung bình pixel trên hàng i trong khoảng j chạy từ j-x,j+x
Tất nhiên đoạn từ [i,0]->[i,x-1] và [i,2b-x]->[i,2b-1] thì set bằng trans
This post was flagged by the community and is temporarily hidden.
set màu từng pixel trong java-android như thế nào v bác
Tham khảo một số cách xử lý với bitmap:
github.com
justingtv/FOFX-Newbie/blob/master/app/src/main/java/xyz/davidng/photoeffector/Utils.java
This file has been truncated. show originalDùng opengl cho nhanh.
Quét toàn bộ pixel trên cái hình thang rồi tính ra vị trí tương ứng trên ảnh gốc. Gán pixel trên hình thang bằng tổng tính theo tỉ lệ trên ảnh gốc.
2 cái vòng for lồng nhau là ra.
opengl thi ntn vậy bác.
Opengl chuyên xử lý ảnh mà, đọc pixel rất nhanh.
Làm sao để gán pixel có màu là màu của pixel ảnh nhỉ?
Cái này tuỳ ngôn ngữ. Bạn có thể tìm getpixel, setpixel in Java. Nhưng nó sẽ cực cùi. Cách tốt nhất là truy cập thẳng vào dữ liệu ảnh. Cách này phải lấy được con trỏ tới vùng dữ liệu ảnh.
Ý e là ví dụ ở hàng i số pixel đang là 2B = 50 ; Nhưng ảnh ban đầu nó là B = 25 thôi chẳng hạn. Phải set màu pixel ntn để 25px đó có thể thể hiện sao cho gần giống 50px kia. Nghĩa là scale sao cho giữ đc màu định dạng màu ban đầu ấy, gần gần như vậy
ý bạn là từ 50px -> 25px ?
thử lấy trung bình xem, từ 50px->25px thì tức là bạn mất đi 25px hay 13px cho mỗi bên (làm tròn)
B1: trên cái 50px gán lại màu pixel i bằng trung bình cộng của giá trị màu các pixel từ i-13+1 -> i+13-1
B2: set các pixel 0->0+13-1 và 49-13+1 -> 49 thành transperancy
Ok. để mình thử xem sao