2015-08-27 2 views
9

एंड्रॉइड एपीआई के संस्करण 23 में कक्षा ImageWriter की शुरुआत हुई थी। मुझे इस कक्षा का उपयोग ऐसे ऐप में करने की ज़रूरत है जो एपीआई पर चलाना चाहिए 19. मैं कक्षा को फिर से कार्यान्वित कैसे कर सकता हूं? क्या कुछ समकक्ष कोड है (मेरे पास एक छवि उदाहरण है जिसे मुझे सतह पर आकर्षित करने की आवश्यकता है)?एंड्रॉइड 19-22 के लिए ImageWriter विकल्प?

+1

आप अपने एसडीके प्रबंधक से M के लिए जावा स्रोत कोड डाउनलोड कर सकते हैं/6.0 पूर्वावलोकन

यहाँ XML कोड है। हालांकि यह अंतिम नहीं है, यह शायद बहुत करीब है। 'ImageWriter' में 10+' मूल 'विधियां हैं, जिसका अर्थ है कि' media_jni' लाइब्रेरी स्रोत के बिना डुप्लिकेट करना मुश्किल होगा, और मुझे नहीं पता कि क्या मूल कोड एनडीके के माध्यम से पुस्तकालय के रूप में सेवा के लिए बनाया जा सकता है एपीआई स्तर 19-22 के लिए। चीजें थोड़ा स्पष्ट होनी चाहिए जब एंड्रॉइड 6.0 रीयलज़ के लिए जहाजों और रिपॉजिटरीज को सभी कोड के साथ अपडेट किया जाता है। हालांकि, मुझे उम्मीद नहीं है कि आपको सफलता मिलेगी। – CommonsWare

उत्तर

0

यहां आपके पास एक कोड है जो आपको एक तस्वीर लेने और सतह पर इसका पूर्वावलोकन करने की अनुमति देता है। मुझे यकीन है कि आप अपने उद्देश्य के लिए कोड अनुकूलित कर सकते हैं।

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <SurfaceView 
    android:id="@+id/preview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 
    <RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="100dip" 
    android:layout_alignParentBottom="true" 
    android:gravity="center_vertical" 
    android:background="#A000"> 
    <Button 
     android:layout_width="100dip" 
     android:layout_height="wrap_content" 
     android:text="Cancel" 
     android:onClick="onCancelClick" 
    /> 
    <Button 
     android:layout_width="100dip" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:text="Snap Photo" 
     android:onClick="onSnapClick" 
    /> 
    </RelativeLayout> 
</RelativeLayout> 

और यहाँ जावा कोड:

package app.test; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.List; 

import android.app.Activity; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.widget.Toast; 


public class PreviewActivity extends Activity implements SurfaceHolder.Callback, Camera.ShutterCallback, Camera.PictureCallback { 

    Camera mCamera; 
    SurfaceView mPreview; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mPreview = (SurfaceView)findViewById(R.id.preview); 
     mPreview.getHolder().addCallback(this); 
     mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

     mCamera = Camera.open(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     mCamera.stopPreview(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     mCamera.release(); 
     Log.d("CAMERA","Destroy"); 
    } 

    public void onCancelClick(View v) { 
     finish(); 
    } 

    public void onSnapClick(View v) { 
     mCamera.takePicture(this, null, null, this); 
    } 

    @Override 
    public void onShutter() { 
     Toast.makeText(this, "Click!", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
     //Here, we chose internal storage 
     try { 
      FileOutputStream out = openFileOutput("picture.jpg", Activity.MODE_PRIVATE); 
      out.write(data); 
      out.flush(); 
      out.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     camera.startPreview(); 
    } 
    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
     Camera.Parameters params = mCamera.getParameters(); 
     List<Camera.Size> sizes = params.getSupportedPreviewSizes(); 
     Camera.Size selected = sizes.get(0); 
     params.setPreviewSize(selected.width,selected.height); 
     mCamera.setParameters(params); 

     mCamera.setDisplayOrientation(90); 
     mCamera.startPreview(); 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     try { 
      mCamera.setPreviewDisplay(mPreview.getHolder()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     Log.i("PREVIEW","surfaceDestroyed"); 
    } 
} 
+0

ImageWriter क्लास छवि वर्गों से संबंधित है (और यह मेरी एकमात्र चीज है)। छवि उदाहरणों के साथ काम करने के लिए मैं इस कोड को कैसे अनुकूलित कर सकता हूं? –

+0

कैमरा स्नैप लेने पर छवि वस्तु बनाता है – arodriguezdonaire

+6

इस उत्तर के पास प्रश्न के साथ कुछ लेना देना नहीं है। उदाहरण के लिए, सवाल कैमरे का उल्लेख नहीं करता है। – CommonsWare

संबंधित मुद्दे