2017-02-09 8 views
-2

私のカスタムカメラの結果画質は、camera2 apiを使用しているシステムカメラと比較して劣ります。カスタムカメラの画質がシステムカメラほど高くないのはなぜですか?

私のアプリはCamera2Basicの例に基づいています。 であり、すべてのモードがautoに設定され、使用可能な最大サイズが使用されます。

JPEG結果:

カスタムカメラ:3984x2988、630キロバイト

ネイティブカメラ:3984x2988、2.73メガバイト

すべてのオープンソースの例は、ほぼ同じ出力を持っています。より良い出力を得る方法はありますか? ご協力いただければ幸いです!

+0

ネイティブカメラアプリから撮影した動画のビットレートと同じ値に設定してみましたか? –

+0

@LouisCADいいえ、あなただけの写真を撮っています – imudin07

+0

あなたのキャプチャリクエストにはどのテンプレートを使用しましたか? –

答えて

0

他の解決策が見つかりました。これは最高のものです。私は単にsamsung camera sdkを使用しています。それは非常に素晴らしいですし、結果はカスタムカメラよりはるかに優れており、ネイティブカメラアプリとほとんど同じです。

0

CameraViewをご覧ください。 これはカスタムカメラの実装です。私はそれがあなたに適切な場所を提供すると思います。ここで

+0

私は彼らのデモをテストし、結果は私が期待どおりではありません:( – imudin07

+0

あなたは具体的に何を見つけませんでしたか? – raktale

+0

動作していますが、なぜ私の質問は、画質がネイティブカメラの品質と同じくらい高いのではないかということです。 – imudin07

0

は、お使いのカメラのフル解像度を使用するためのアプリです:

のAndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest package="com.osahub.rachit.highrescamera" 
     xmlns:android="http://schemas.android.com/apk/res/android"> 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".CameraActivity" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
</application> 

CameraActivity.java

package com.osahub.rachit.highrescamera; 

import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.Matrix; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.support.v4.view.MenuItemCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.ShareActionProvider; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

import java.io.File; 

public class CameraActivity extends AppCompatActivity { 

    ImageView image; 
    Button camera; 
    Uri imageUri; 
    private String folderPath = Environment.getExternalStorageDirectory() 
     .getPath() + "/CameraActivity/images"; 
    private File file; 

    private ShareActionProvider mShareActionProvider; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_camera); 
     camera = (Button) findViewById(R.id.camera); 
     image = (ImageView) findViewById(R.id.image); 
     File folder = new File(folderPath); 
     folder.mkdirs(); 

     file = new File(folder.getPath() + "/image.jpg"); 
     camera.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       imageUri = Uri.fromFile(file); 
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
       startActivityForResult(intent, 10); 
      } 
     }); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     try { 
      Bitmap bp = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); 
      Matrix rotateMatrix = new Matrix(); 
      rotateMatrix.postRotate(90); 
      Bitmap rotatedBitmap = Bitmap.createBitmap(bp, 0, 0, bp.getWidth(), 
       bp.getHeight(), rotateMatrix, false); 
      camera.setVisibility(View.GONE); 
      image.setImageBitmap(rotatedBitmap); 
      setShareIntent(createShareIntent()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_camera, menu); 

     MenuItem item = menu.findItem(R.id.action_share); 
     mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); 

     setShareIntent(createShareIntent()); 
     return true; 
    } 

    private void setShareIntent(Intent shareIntent) { 
     if (mShareActionProvider != null) { 
      mShareActionProvider.setShareIntent(shareIntent); 
     } 
    } 

    private Intent createShareIntent() { 
     Intent shareIntent = new Intent(); 
     shareIntent.setAction(Intent.ACTION_SEND); 
     shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri); 
     shareIntent.setType("image/*"); 
     return shareIntent; 
    } 
} 

activity_camera.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin" 
       tools:context=".CameraActivity"> 

    <Button 
     android:id="@+id/camera" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:text="@string/open_camera"/> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignTop="@+id/camera" 
     android:contentDescription="@string/image_description"/> 
</RelativeLayout> 
+0

あなたの努力に感謝しますが、私はカスタムカメラを使用しています – imudin07

0

この偉大なオープンカメラアプリケーションがあります。これはオープンソースであり、彼は画像保存をどのように行ったかを確認することができます。あなたの問題はイメージセービングだと思います。あなたのイメージはオリジナルよりも小さいので、あなたのイメージは低品質です。ここにオープンカメラのウェブサイトhttp://opencamera.sourceforge.net/があります。開いているカメラのサポートカメラAPI 1とAPI 2

+0

私は前にこのアプリをテストしました、それはcamera2basicと同じです – imudin07

+0

完全な解像度で開いたカメラで画像をキャプチャする場合。そのサイズは1MB未満ですか? – Maxitors

+0

はいsamsung s6を使用して541KBです – imudin07

0

私は解決策を見つけた。 このgithubのコードは私をたくさん助けた:https://github.com/webjb/myrobot

私はYUV_420_888フォーマットでカメラから画像を撮影し、NDKを使用してOpenCVのために、そのバイトのバッファを渡すと、OpenCVのは、JPEGとして保存しています。

品質が高く、ファイルサイズが2MBを超えています!

関連する問題