OSDN Git Service

デジタルズームとライブビュー拡大を追加した。
authorMRSa <mrsa@myad.jp>
Fri, 1 Sep 2017 16:14:52 +0000 (01:14 +0900)
committerMRSa <mrsa@myad.jp>
Fri, 1 Sep 2017 16:14:52 +0000 (01:14 +0900)
app/src/main/java/net/osdn/gokigen/a01d/A01dMain.java
app/src/main/java/net/osdn/gokigen/a01d/camera/olympus/wrapper/ILiveViewControl.java
app/src/main/java/net/osdn/gokigen/a01d/camera/olympus/wrapper/OlyCameraWrapper.java
app/src/main/java/net/osdn/gokigen/a01d/liveview/LiveViewFragment.java
app/src/main/java/net/osdn/gokigen/a01d/preference/IPreferencePropertyAccessor.java
app/src/main/java/net/osdn/gokigen/a01d/preference/PreferenceFragment.java
app/src/main/res/values-ja/arrays.xml
app/src/main/res/values-ja/strings.xml
app/src/main/res/values/arrays.xml
app/src/main/res/values/strings.xml
app/src/main/res/xml/preferences.xml

index 5c480c0..4b10f5b 100644 (file)
@@ -179,7 +179,8 @@ public class A01dMain extends AppCompatActivity implements ICameraStatusReceiver
         IOlyCameraConnection connection = interfaceProvider.getOlyCameraConnection();
         if (connection != null) {
             IOlyCameraConnection.CameraConnectionStatus status = connection.getConnectionStatus();
-            if (status == IOlyCameraConnection.CameraConnectionStatus.CONNECTED) {
+            if (status == IOlyCameraConnection.CameraConnectionStatus.CONNECTED)
+            {
                 // 接続中のときには切断する
                 connection.disconnect(false);
                 return;
index 85531cc..8adada7 100644 (file)
@@ -11,4 +11,10 @@ public interface ILiveViewControl
     void changeLiveViewSize(String size);
     void setLiveViewListener(CameraLiveViewListenerImpl listener);
     void startLiveView();
+
+    void setDigitalZoom(float scale);
+    void setLiveViewScale(float scale);
+
+    void updateDigitalZoom();
+    void updateMagnifyingLiveViewScale();
 }
index 5a3a6dc..1c00bc7 100644 (file)
@@ -1,10 +1,16 @@
 package net.osdn.gokigen.a01d.camera.olympus.wrapper;
 
 import android.app.Activity;
+import android.content.SharedPreferences;
+import android.graphics.PointF;
+import android.support.v7.preference.PreferenceManager;
 import android.util.Log;
 
 import net.osdn.gokigen.a01d.camera.olympus.wrapper.property.CameraPropertyUtilities;
 import net.osdn.gokigen.a01d.liveview.CameraLiveViewListenerImpl;
+import net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor;
+
+import java.util.Map;
 
 import jp.co.olympus.camerakit.OLYCamera;
 
@@ -15,12 +21,12 @@ import jp.co.olympus.camerakit.OLYCamera;
 class OlyCameraWrapper implements ICameraRunMode, ILiveViewControl
 {
     private final String TAG = toString();
-    //private final Activity context;
+    private final Activity context;
     private final OLYCamera camera;
 
     OlyCameraWrapper(Activity context)
     {
-        //this.context = context;
+        this.context = context;
         camera = new OLYCamera();
         camera.setContext(context.getApplicationContext());
     }
@@ -112,4 +118,173 @@ class OlyCameraWrapper implements ICameraRunMode, ILiveViewControl
             e.printStackTrace();
         }
     }
+
+    /**
+     *   デジタルズームする
+     *
+     */
+    @Override
+    public void setDigitalZoom(float scale)
+    {
+
+    }
+
+    /**
+     *   ライブビューを拡大する
+     *
+     */
+    @Override
+    public void setLiveViewScale(float scale)
+    {
+
+    }
+
+    /**
+     *   ライブビューを拡大する
+     *
+     */
+    @Override
+    public void updateDigitalZoom()
+    {
+        try
+        {
+            float scale = getDigitalZoomScalePreference();
+            camera.changeDigitalZoomScale(scale);
+            Log.v(TAG, "DIGITAL ZOOM SCALE : " + scale);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     *   ライブビューを拡大する
+     *
+     */
+    @Override
+    public void updateMagnifyingLiveViewScale()
+    {
+       try
+       {
+           float scale = getMagnifyingLiveViewScale();
+           if (scale < 5.0f)
+           {
+               if (camera.isMagnifyingLiveView())
+               {
+                   camera.stopMagnifyingLiveView();
+                   Log.v(TAG, "RESET LIVE VIEW SCALE : " + 1.0f);
+               }
+               return;
+           }
+           OLYCamera.MagnifyingLiveViewScale setScale;
+           if (scale >= 14.0f)
+           {
+               setScale = OLYCamera.MagnifyingLiveViewScale.X14;
+           }
+           else if (scale >= 10.0f)
+           {
+               setScale = OLYCamera.MagnifyingLiveViewScale.X10;
+           }
+           else if (scale >= 7.0f)
+           {
+               setScale = OLYCamera.MagnifyingLiveViewScale.X7;
+           }
+           else // if (scale >= 5.0f)
+           {
+               setScale = OLYCamera.MagnifyingLiveViewScale.X5;
+           }
+           changeMagnifyingLiveView(setScale);
+           Log.v(TAG, "SET LIVE VIEW SCALE : " + scale);
+       }
+       catch (Exception e)
+       {
+           e.printStackTrace();
+       }
+    }
+
+    /**
+     *   ライブビューの中心を拡大する
+     *
+     */
+    private void changeMagnifyingLiveView(OLYCamera.MagnifyingLiveViewScale setScale)
+    {
+        try
+        {
+            PointF centerPoint = new PointF(0.5f, 0.5f);  // 中心座標
+            if (camera.isMagnifyingLiveView())
+            {
+                camera.changeMagnifyingLiveViewScale(setScale);
+            }
+            else
+            {
+                camera.startMagnifyingLiveViewAtPoint(centerPoint, setScale);
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     *   ライブビュー拡大倍率の設定値を応答する
+     *
+     */
+    private float getMagnifyingLiveViewScale()
+    {
+        float scale = 1.0f;
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
+        String value = preferences.getString(IPreferencePropertyAccessor.MAGNIFYING_LIVE_VIEW_SCALE, IPreferencePropertyAccessor.MAGNIFYING_LIVE_VIEW_SCALE_DEFAULT_VALUE);
+        try
+        {
+            scale = Float.parseFloat(value);
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            scale = 1.0f;
+        }
+        return (scale);
+    }
+
+    /**
+     *   デジタルズーム倍率の設定値を応答する
+     *
+     */
+    private float getDigitalZoomScalePreference()
+    {
+        float scale = 1.0f;
+        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
+        String value = preferences.getString(IPreferencePropertyAccessor.DIGITAL_ZOOM_LEVEL, IPreferencePropertyAccessor.DIGITAL_ZOOM_LEVEL_DEFAULT_VALUE);
+        try
+        {
+            Map<String, Float> range = camera.getDigitalZoomScaleRange();
+            float max = range.get(OLYCamera.DIGITAL_ZOOM_SCALE_RANGE_MAXIMUM_KEY);
+            float min = range.get(OLYCamera.DIGITAL_ZOOM_SCALE_RANGE_MINIMUM_KEY);
+
+            if (value.equals("MAX"))
+            {
+                scale = max;
+            }
+            else
+            {
+                scale = Float.parseFloat(value);
+            }
+            if (scale < min)
+            {
+                scale = min;
+            }
+            else if (scale > max)
+            {
+                scale = max;
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            scale = 1.0f;
+        }
+        return (scale);
+    }
 }
index 82b3303..295a705 100644 (file)
@@ -757,6 +757,12 @@ public class LiveViewFragment extends Fragment implements IStatusViewDrawer
             liveViewControl.setLiveViewListener(liveViewListener);
             liveViewListener.setCameraLiveImageView(imageView);
             liveViewControl.startLiveView();
+
+            // デジタルズームの設定
+            liveViewControl.updateDigitalZoom();
+
+            // ライブビューの倍率設定
+            liveViewControl.updateMagnifyingLiveViewScale();
         }
         catch (Exception e)
         {
index 6285842..bcad36e 100644 (file)
@@ -25,6 +25,13 @@ public interface IPreferencePropertyAccessor
     String CAMERAKIT_VERSION = "camerakit_version";
 
     String SHOW_GRID_STATUS = "show_grid";
+
+    String DIGITAL_ZOOM_LEVEL = "digital_zoom_level";
+    String DIGITAL_ZOOM_LEVEL_DEFAULT_VALUE = "MAX";
+
+    String MAGNIFYING_LIVE_VIEW_SCALE = "magnifying_live_view_scale";
+    String MAGNIFYING_LIVE_VIEW_SCALE_DEFAULT_VALUE = "1.0";
+
 /*****
     int CHOICE_SPLASH_SCREEN = 10;
 
index c1e3e98..d20a989 100644 (file)
@@ -43,6 +43,10 @@ public class PreferenceFragment extends PreferenceFragmentCompat implements Shar
     private ProgressDialog busyDialog = null;
     private PreferenceSynchronizer preferenceSynchronizer = null;
 
+    /**
+     *
+     *
+     */
     public void setInterface(Context context, IOlympusInterfaceProvider factory, IChangeScene changeScene)
     {
         Log.v(TAG, "setInterface()");
@@ -104,9 +108,21 @@ public class PreferenceFragment extends PreferenceFragmentCompat implements Shar
         {
             editor.putString(net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.SOUND_VOLUME_LEVEL, net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.SOUND_VOLUME_LEVEL_DEFAULT_VALUE);
         }
+        if (!items.containsKey(net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.MAGNIFYING_LIVE_VIEW_SCALE))
+        {
+            editor.putString(net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.MAGNIFYING_LIVE_VIEW_SCALE, net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.MAGNIFYING_LIVE_VIEW_SCALE_DEFAULT_VALUE);
+        }
+        if (!items.containsKey(net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.DIGITAL_ZOOM_LEVEL))
+        {
+            editor.putString(net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.DIGITAL_ZOOM_LEVEL, net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor.DIGITAL_ZOOM_LEVEL_DEFAULT_VALUE);
+        }
         editor.apply();
     }
 
+    /**
+     *
+     *
+     */
     @Override
     public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
     {
@@ -133,8 +149,27 @@ public class PreferenceFragment extends PreferenceFragmentCompat implements Shar
                 }
             });
             liveViewQuality.setSummary(liveViewQuality.getValue() + " " + sizeTable.get(liveViewQuality.getValue()));
-        }
 
+            ListPreference liveViewScale = (ListPreference) findPreference(IPreferencePropertyAccessor.MAGNIFYING_LIVE_VIEW_SCALE);
+            liveViewScale.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+                @Override
+                public boolean onPreferenceChange(Preference preference, Object newValue) {
+                    preference.setSummary(newValue + " ");
+                    return (true);
+                }
+            });
+            liveViewScale.setSummary(liveViewScale.getValue() + " ");
+
+            ListPreference digitalZoom = (ListPreference) findPreference(IPreferencePropertyAccessor.DIGITAL_ZOOM_LEVEL);
+            digitalZoom.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+                @Override
+                public boolean onPreferenceChange(Preference preference, Object newValue) {
+                    preference.setSummary(newValue + " ");
+                    return (true);
+                }
+            });
+            digitalZoom.setSummary(digitalZoom.getValue() + " ");
+        }
         findPreference("exit_application").setOnPreferenceClickListener(powerOffController);
     }
 
@@ -159,7 +194,7 @@ public class PreferenceFragment extends PreferenceFragmentCompat implements Shar
             focalLength = String.format(Locale.ENGLISH, "%3.0fmm", actualLength);
         }
         else
-            {
+        {
             focalLength = String.format(Locale.ENGLISH, "%3.0fmm - %3.0fmm (%3.0fmm)", minLength, maxLength, actualLength);
         }
         findPreference("focal_length").setSummary(focalLength);
@@ -185,6 +220,10 @@ public class PreferenceFragment extends PreferenceFragmentCompat implements Shar
         }
     }
 
+    /**
+     *
+     *
+     */
     private void setCameraProperty(String name, String value)
     {
         try
@@ -199,6 +238,10 @@ public class PreferenceFragment extends PreferenceFragmentCompat implements Shar
         }
     }
 
+    /**
+     *
+     *
+     */
     @Override
     public void onResume()
     {
@@ -216,6 +259,10 @@ public class PreferenceFragment extends PreferenceFragmentCompat implements Shar
 
     }
 
+    /**
+     *
+     *
+     */
     @Override
     public void onPause()
     {
index 8733cbe..098278e 100644 (file)
         <item >XGA</item>
         <item >QUAD_VGA</item>
     </string-array>
+
+    <string-array name="digital_zoom_level">
+        <item >1.0</item>
+        <item >1.5</item>
+        <item >2.0</item>
+        <item >2.5</item>
+        <item >MAX</item>
+    </string-array>
+
+    <string-array name="digital_zoom_level_value">
+        <item >1.0</item>
+        <item >1.5</item>
+        <item >2.0</item>
+        <item >2.5</item>
+        <item >MAX</item>
+    </string-array>
+
+    <string-array name="magnifying_live_view_scale">
+        <item >1.0</item>
+        <item >5.0</item>
+        <item >7.0</item>
+        <item >10.0</item>
+        <item >14.0</item>
+    </string-array>
+
+    <string-array name="magnifying_live_view_scale_value">
+        <item >1.0</item>
+        <item >5.0</item>
+        <item >7.0</item>
+        <item >10.0</item>
+        <item >14.0</item>
+    </string-array>
+
 </resources>
index 4f4123d..a3a55ca 100644 (file)
     <string name="pref_auto_connect_camera">カメラに自動接続</string>
     <string name="dialog_message_power_off">カメラの電源を切り、アプリケーションを終了します。</string>
 
-
     <string name="pref_cat_live_view">ライブビュー設定</string>
     <string name="pref_live_view_quality">ライブビュー品質</string>
+    <string name="pref_digital_zoom_level">デジタルズーム倍率</string>
+    <string name="pref_magnifying_live_view_scale">ライブビュー拡大倍率</string>
 
     <string name="pref_cat_info">カメラ情報</string>
     <string name="pref_focal_length">焦点距離</string>
index 8733cbe..fe157fb 100644 (file)
         <item >XGA</item>
         <item >QUAD_VGA</item>
     </string-array>
+
+
+    <string-array name="digital_zoom_level">
+        <item >1.0</item>
+        <item >1.5</item>
+        <item >2.0</item>
+        <item >2.5</item>
+        <item >MAX</item>
+    </string-array>
+
+    <string-array name="digital_zoom_level_value">
+        <item >1.0</item>
+        <item >1.5</item>
+        <item >2.0</item>
+        <item >2.5</item>
+        <item >MAX</item>
+    </string-array>
+
+    <string-array name="magnifying_live_view_scale">
+        <item >1.0</item>
+        <item >5.0</item>
+        <item >7.0</item>
+        <item >10.0</item>
+        <item >14.0</item>
+    </string-array>
+
+    <string-array name="magnifying_live_view_scale_value">
+        <item >1.0</item>
+        <item >5.0</item>
+        <item >7.0</item>
+        <item >10.0</item>
+        <item >14.0</item>
+    </string-array>
+
 </resources>
index 7d569f7..50dd15a 100644 (file)
@@ -29,6 +29,8 @@
 
     <string name="pref_cat_live_view">Live View Settings</string>
     <string name="pref_live_view_quality">Live View Quality</string>
+    <string name="pref_digital_zoom_level">Digital Zoom Level</string>
+    <string name="pref_magnifying_live_view_scale">Magnifying Live View Scale</string>
 
     <string name="pref_cat_info">Information</string>
     <string name="pref_focal_length">Focal Length</string>
index d83f940..536bcbc 100644 (file)
     <PreferenceCategory
         android:title="@string/pref_cat_live_view">
         <ListPreference
-            android:title="@string/pref_live_view_quality"
-            android:entryValues="@array/live_view_quality_value"
-            android:entries="@array/live_view_quality"
-            android:key="live_view_quality"
-            android:defaultValue="QVGA"/>
+        android:title="@string/pref_live_view_quality"
+        android:entryValues="@array/live_view_quality_value"
+        android:entries="@array/live_view_quality"
+        android:key="live_view_quality"
+        android:defaultValue="QVGA"/>
+
+        <ListPreference
+            android:title="@string/pref_magnifying_live_view_scale"
+            android:entryValues="@array/magnifying_live_view_scale_value"
+            android:entries="@array/magnifying_live_view_scale"
+            android:key="magnifying_live_view_scale"
+            android:defaultValue="1.0" />
+
+        <ListPreference
+            android:title="@string/pref_digital_zoom_level"
+            android:entryValues="@array/digital_zoom_level_value"
+            android:entries="@array/digital_zoom_level"
+            android:key="digital_zoom_level"
+            android:defaultValue="MAX" />
+
     </PreferenceCategory>
 
     <PreferenceCategory