Làm thế nào để có được hình ảnh xem trước máy ảnh của Android Apps
Làm thế nào để có được một bản xem trước của máy ảnh như là một hình ảnh của các ứng dụng Android?
Các cuối cùng của âm thanh màn trập máy ảnh trên Android là một tiếp nối của.
Trong Android, là một cách để tiết kiệm mà không có takePicture (), hình ảnh camera.
Tôi thử các màu sắc khác nhau, tôi đã có thể tiết kiệm như là một hình ảnh bằng cách nào đó, và tôi muốn giới thiệu, bao gồm cả câu chuyện kinh dị.
Không trường hợp 1 getDrawingCache ()
Trong Android, cho dù có là một API hữu ích được lưu như một bản chụp của hình ảnh trên màn hình? Trong điều kiện của, tôi nhìn.
Sau đó, chúng tôi có những phương pháp sau đây.
getDrawingCache ()
Đây là phương pháp của android.view.View lớp.
Đầu tiên, nếu bạn cố gắng sử dụng các () getDrawingCache, null được trả lại.
Và đọc các tài liệu tham khảo API, bởi vì có một lời giải thích phải kích hoạt bộ nhớ cache, tôi chạy ngay trước khi những phương pháp sau đây.
setDrawingCacheEnabled (true);
Điều này, chứ không phải là vô giá trị, là một thể hiện của các Bitmap dự kiến bây giờ sẽ trở lại.
Xử lý một thể hiện của nó, nhưng đã không được lưu lại, là một tập tin hình ảnh màu đen.
Cũng trong các giả lập, thậm chí Xperia.
Tôi đã thử với cách sử dụng sai trái của các API là NDE không có vẻ sẽ không làm nếu không phải là bản xem trước của máy ảnh.
Nếu bạn làm điều tương tự trên màn hình hoặc nút để chỉ hiển thị hình ảnh thông thường của ứng dụng đã được lưu trữ.
Là suy luận, và xem trước của máy ảnh, View thường, bộ đệm hiển thị là một cái gì đó khác nhau, có lẽ, suy nghĩ getDrawingCache này (), hình ảnh xem trước của máy ảnh sẽ không thể thu được, phương pháp này đã bị bỏ.
Chế biến như là một mảng byte được thông qua trong trường hợp 2 thất bại PreviewCallback
Chức năng máy ảnh của Android, có thể cấu hình một ví dụ khi thực hiện các hoạt động như chế biến và chụp ảnh xem trước, để gọi lại.
Một bản xem trước của máy ảnh, nếu bạn thiết lập một cuộc gọi lại, nó sẽ được gọi trở lại từng người một, là PreviewCallback.
Cụ thể, nó là một cuộc gọi lại mà bạn thiết lập trong các phương pháp sau đây.
setPreviewCallback (Camera.PreviewCallback cb)
Đây là phương pháp của lớp android.hardware.Camera.
Trong quá trình xem trước, trên cơ sở thường xuyên, () phương pháp được gọi là một thể hiện của PreviewCallback onPreviewFrame loại mà bạn thiết lập trong các đối số.
Là một đối số cho phương pháp này, là để đến được thông qua một mảng byte loại, điều này cần phải có được trong các dữ liệu hình ảnh xem trước.
Tuy nhiên, mảng này byte, và nó không thể được chuyển đổi một Bitmap như ·.
Ví dụ, nếu bạn vượt qua các phương pháp sau đây, mảng này, vô giá trị được trả lại sẽ gây ra.
decodeByteArray (byte [] data, int offset, int chiều dài)
Sẽ không phải là một phương pháp của lớp android.graphics.BitmapFactory, null được trả về bởi phương pháp này, nó không phải là một định dạng mảng byte là chính xác.
Chế biến một mảng byte được thông qua trong trường hợp thành công PreviewCallback
Các phương pháp trước đó, nó phải đi làm điều đó để chuyển đổi mảng byte để một cái gì đó! Và tin rằng, tôi đã kiểm tra một chút dính.
Sau đó, có một nơi mà câu hỏi tương tự được yêu cầu.
Bạn muốn trở thành một byte dữ liệu bitmap từ máy ảnh
Bạn phải cho tôi biết trong một cách mà ông saikoro của bài viết này.
OnPreviewFrame PreviewCallback loại sơ thẩm (), nhưng chỉ một trích đoạn chuyển đổi phương pháp. (Nếu quý vị không biết chỉ này, xin vui lòng cố gắng để duyệt các trang web nguồn.)
public void onPreviewFrame (byte [] dữ liệu, máy ảnh camera)
cuối cùng int width = getWidth (); cuối cùng int chiều cao = getHeight chiều rộng của xem trước / / (); int chiều cao / / Xem trước [] rgb = new int [(chiều rộng * chiều cao); thử một mảng các điểm ảnh / / ARGB8888 {
Bitmap bmp = Bitmap.createBitmap (chiều rộng, chiều cao, Bitmap.Config.ARGB_8888); bmp.setPixels chuyển đổi / / (rgb, 0, chiều rộng; decodeYUV420SP tạo bitmap rỗng (rgb, dữ liệu, chiều rộng, chiều cao) / / ARGB8888 , 0, 0, chiều rộng, chiều cao); thiết lập một bitmap từ pixel / / đã được chuyển đổi
/ / ★
} Catch (Exception e) {
/ / Lỗi}
}
công tĩnh cuối cùng void decodeYUV420SP (int [] rgb, byte [] yuv420sp, int width, int chiều cao) {
cuối cùng int frameSize = chiều rộng * chiều cao;
(int j = 0, yp = 0; j <chiều cao; j + +) {
int uvp = frameSize + (j >> 1) * chiều rộng, u = 0, v = 0;
(int i = 0; i <chiều rộng; i + +, yp + +) {
int y = (0xff & ((int) yuv420sp [yp])) - 16;
if (y <0) y = 0;
if ((i & 1) == 0) {
v = (0xff & yuv420sp [uvp + +]) - 128;
u = (0xff & yuv420sp [uvp + +) - 128;
}
int y1192 = 1192 * y;
int r = (y1192 + 1.634 * v);
int g = (y1192 - 833 * v - 400 * u);
int b = (y1192 + 2.066 * u);
if (r <0) r = 0; nếu người nào khác (r> 262.143) r = 262143;
(g <0) g = 0; khác nếu (g> 262.143) g = 262143;
if (b <0) = 0; khác nếu (b> 262143) b = 262143;
rgb [yp] = 0xff000000 | ((r << 6) & 0xFF0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff);
}
}
}
Tuy nhiên, trong bài viết này, như xa như thực sự tiết kiệm các hình ảnh không được đào sâu.
Là một phần của "★" ở trên.
Tôi nghĩ rằng thời gian tới, và sau khi suy nghĩ tôi muốn giới thiệu cách của riêng tôi, tiết kiệm một mẫu của các xử lý của phần này.
⇒ Làm thế nào để lưu hình ảnh chụp với chức năng máy ảnh của các ứng dụng Android











