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

Dương Nguyễn Văn viết 00:30 ngày 01/10/2018

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”

Ngân Béo viết 00:18 ngày 01/10/2018

Dùng thuật toán tra trên Google.

Dương Nguyễn Văn viết 00:20 ngày 01/10/2018

thuật toán nào vậy bác ơi?

Tú Anh Hoàng viết 00:31 ngày 01/10/2018

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

Thanh V Iet viết 00:27 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

Dương Nguyễn Văn viết 00:16 ngày 01/10/2018

set màu từng pixel trong java-android như thế nào v bác

X viết 00:22 ngày 01/10/2018

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

package xyz.davidng.photoeffector;

import android.graphics.Bitmap;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.os.Environment;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
This file has been truncated. show original

Ngân Béo viết 00:31 ngày 01/10/2018

Dùng opengl cho nhanh.

Văn Dương viết 00:29 ngày 01/10/2018

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.

Dương Nguyễn Văn viết 00:20 ngày 01/10/2018

opengl thi ntn vậy bác.

Ngân Béo viết 00:20 ngày 01/10/2018

Opengl chuyên xử lý ảnh mà, đọc pixel rất nhanh.

Dương Nguyễn Văn viết 00:27 ngày 01/10/2018

Làm sao để gán pixel có màu là màu của pixel ảnh nhỉ?

Văn Dương viết 00:23 ngày 01/10/2018

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.

Dương Nguyễn Văn viết 00:24 ngày 01/10/2018

Ý 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

Tú Anh Hoàng viết 00:23 ngày 01/10/2018

ý 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

Dương Nguyễn Văn viết 00:18 ngày 01/10/2018

Ok. để mình thử xem sao

Bài liên quan
0