Có thể chụp ảnh mà không hiển thị xem trước máy ảnh không ?, tôi có yêu cầu tôi có thể chụp ảnh từ một chủ đề hoặc từ một dịch vụ mà không làm phiền ứng dụng nền trước, nơi tôi không muốn hiển thị xem trước máy ảnh, nhưng tôi vẫn muốn chụp ảnh ở chế độ nền và lưu trữ hình ảnh đó trong thiết bịcách chụp ảnh mà không cần xem trước từ một dịch vụ hoặc chuỗi?
Trả lời
Hãy thử mã này. Nó sẽ nhấp vào một hình ảnh khi hoạt động khởi động. Nó có một bản xem trước, nhưng kích thước xem trước được đặt thành 0 bởi 0 dp.
package fortyonepost.com.pwop;
import java.io.IOException;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.ImageView;
public class TakePicture extends Activity implements SurfaceHolder.Callback
{
//a variable to store a reference to the Image View at the main.xml file
private ImageView iv_image;
//a variable to store a reference to the Surface View at the main.xml file
private SurfaceView sv;
//a bitmap to display the captured image
private Bitmap bmp;
//Camera variables
//a surface holder
private SurfaceHolder sHolder;
//a variable to control the camera
private Camera mCamera;
//the camera parameters
private Parameters parameters;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//get the Image View at the main.xml file
iv_image = (ImageView) findViewById(R.id.imageView);
//get the Surface View at the main.xml file
sv = (SurfaceView) findViewById(R.id.surfaceView);
//Get a surface
sHolder = sv.getHolder();
//add the callback interface methods defined below as the Surface View callbacks
sHolder.addCallback(this);
//tells Android that this surface will have its data constantly replaced
sHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)
{
//get camera parameters
parameters = mCamera.getParameters();
//set camera parameters
mCamera.setParameters(parameters);
mCamera.startPreview();
//sets what code should be executed after the picture is taken
Camera.PictureCallback mCall = new Camera.PictureCallback()
{
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
//decode the data obtained by the camera into a Bitmap
bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
//set the iv_image
iv_image.setImageBitmap(bmp);
}
};
mCamera.takePicture(null, null, mCall);
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
// The Surface has been created, acquire the camera and tell it where
// to draw the preview.
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
//stop the preview
mCamera.stopPreview();
//release the camera
mCamera.release();
//unbind the camera from this object
mCamera = null;
}
}
tham khảo: http://www.41post.com/3794/programming/android-take-a-picture-without-displaying-a-preview
Điều này đang đi đúng hướng, nhưng bạn đang sử dụng 'Hoạt động' thay vì chuỗi hoặc dịch vụ nền. – Sam
Điều này có một hình ảnh, nhưng nó được xoay 90 độ! Để kiểm tra, tôi đã thực hiện chế độ xem bề mặt 200x200 pixel thay vì 0 chiều rộng. Chế độ xem bề mặt cũng hiển thị hình ảnh sang một bên. – Raja
bạn có thể sử dụng một surfaceholder.callback giả
private SurfaceHolder.Callback dummySurfaceCallback = new SurfaceHolder.Callback()
{
@Override
public void surfaceCreated(SurfaceHolder holder)
{
// do nothing
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
// do nothing
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
// do nothing
}
};
và áp dụng nó vào một surfaceholder (previewHolder)
preview = (SurfaceView) findViewById(R.id.preview);
previewHolder = preview.getHolder();
previewHolder.addCallback(dummySurfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
và sau đó sử dụng previewholder trong khi thiết lập xem trước hiển thị trong mediarecoreder.
mediaRecorder.setPreviewDisplay(previewHolder.getSurface());
phương pháp này sẽ cho bạn xem trước màn hình đen. hoạt động cho tôi, tôi hy vọng điều này sẽ giúp ích cho bạn ...
Tôi không thể nhận câu trả lời được chấp nhận để làm việc trong hoạt động chính của mình (hoạt động như một hoạt động riêng biệt khi tôi thay đổi bề mặt thành 1dpi theo 1dpi, nhưng sau khi chụp ảnh, lượt xem động của tôi sẽ biến mất).
để chụp ảnh mà không xem trước trong hoạt động chính của mình, tôi đã sử dụng mã từ Android - Take picture without preview (phiên bản được sửa đổi sau).
...
private SurfaceView sv;
Camera myCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
...
private void takePhoto() {
Camera.Parameters parameters = myCamera.getParameters();
// myCamera.setDisplayOrientation(180);
// parameters.setPictureFormat(ImageFormat.JPEG);
// parameters.setPictureFormat(PixelFormat.JPEG);
myCamera.setParameters(parameters);
SurfaceView mview = sv;
try {
myCamera.setPreviewDisplay(mview.getHolder());
myCamera.startPreview();
myCamera.takePicture(null, null, photoCallback);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Camera.PictureCallback photoCallback=new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
saveMyPhotoToParse(data);
// Log.i(DEBUG_TAG,"image pseudo saved");
}
};
ngoại lệ con trỏ null trên dòng này myCamera.setPreviewDisplay (mview.getHolder()); –
Hãy xem trước bên trong một bố trí tuyến tính và thay đổi giá trị alpha 255 đầy đủ trong suốt 0 đầy đủ đục
cameraPreview_holderLL.setAlpha (255); // bật xem trước
máy ảnhPreview_holderLL.setAlpha (0); // tắt xem trước
<LinearLayout
android:id="@+id/camera_preview_holder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/camera_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
- 1. Chụp ảnh từ camera trước và lưu vào thẻ SD mà không cần xem trước
- 2. Cách chụp ảnh mà không hiển thị xem trước trong iOS
- 3. In PDF từ ASP.Net mà không cần xem trước
- 4. có thể chụp ảnh mà không cần khởi chạy camera trước trong iphone sdk
- 5. Cách sử dụng Máy ảnh để chụp ảnh trong nền Dịch vụ trên Android?
- 6. iOS: Chụp ảnh từ máy ảnh mặt trước
- 7. Ảnh chụp màn hình từ dịch vụ nền của một ứng dụng khác (theo chương trình)
- 8. Chụp ảnh từ máy ảnh thành dạng hoặc html5 canvas
- 9. START_STICKY, dịch vụ Android nền trước biến mất mà không cần thông báo
- 10. Printing ServerReport mà không xem trước
- 11. Tạo dịch vụ WCF mà không cần tệp .svc
- 12. Xem trước hình ảnh mà không cần tải lên máy chủ của tôi
- 13. Sử dụng dịch vụ Google +1 mà không cần JavaScript
- 14. Android SDK: Xem hình ảnh máy ảnh xem trước thô mà không hiển thị hình ảnh
- 15. Gửi một đối tượng đến một dịch vụ thông qua Intent mà không cần ràng buộc
- 16. Gọi một dịch vụ WCF mà không cần tạo một Assembly
- 17. Dịch vụ địa phương hoặc dịch vụ từ xa?
- 18. Xem trước máy ảnh Android - Cách 'đóng băng' máy ảnh?
- 19. Chụp ảnh mặt trước camera - Phonegap?
- 20. Cách gửi Hình ảnh từ Dịch vụ Web trong Spring
- 21. Chụp ảnh màn hình trên điện thoại Android khi phát video và xem trước máy ảnh
- 22. Cách chụp ảnh thô từ máy ảnh android
- 23. Monotouch/WCF: Cách sử dụng dịch vụ wcf mà không cần svcutil
- 24. Chụp ảnh từ webcam
- 25. Máy ảnh mặt trước của Android Chụp ảnh ngược
- 26. REGEX: Chụp tên tệp từ URL mà không cần phần mở rộng tệp
- 27. WCF một dịch vụ hoặc nhiều dịch vụ
- 28. Cách xem trước hình ảnh với TFileOpenDialog
- 29. Cách mô phỏng yêu cầu HTTP Post từ chế độ xem django mà không cần mẫu
- 30. Dừng một Tác vụ mà không cần ThrowIfCancellationRequested
Bạn có thấy những câu hỏi khác này không? http://stackoverflow.com/questions/2386025/android-camera-without-preview http://stackoverflow.com/questions/7398897/how-to-use-camera-to-take-picture-in-a-background -service-on-android –
bất kỳ chương trình mẫu nào để sử dụng camera trước mà không xem trước và lưu thẻ sd – city0666