我正在制作一个长时间曝光计算器,这允许用户输入他们当前的快门速度,选择一个 EV(曝光值),然后单击计算以计算出等效曝光。
当前快门速度和所需的 EV 变化均从微调器中选择,您可以在此处看到: https ://dl.dropboxusercontent.com/u/14064960/2013-04-17%2011.31.47.png
由此产生的等效暴露取决于这两个变量。
例如:
当前快门速度:1/100 EV:+1 等效快门速度 = 1/50
当前快门速度:1/100 EV:+2 等效快门速度 = 1/25
我想出如何对所有变量执行此操作的唯一方法是列出所有可能的组合的MASSIVE IF 语句:
If shutter speed is 1/100 and EV is +2, then equivalent shutter speed is 1/25.
有 20 种不同的快门速度和 10 种不同的 EV 值,所以这将是 IF 的负载。
有人对我怎么可能做到这一点有更好的想法吗?
我不是在追求完整的代码,而是在追求伪代码或一种方法,这样我就可以自己解决了,谢谢。
任何帮助将不胜感激!
编辑:
计算公式是,对于每个 EV 增量,快门速度必须加倍,但这很复杂,因为快门速度的格式会发生变化。
1/4000、1/2000、1/1000、1/500、1/250、1/125、1/60、1/30、1/15、1/8、1/4、1/2、1秒、2秒、 4 秒、8 秒、15 秒、30 秒、1 分钟、2 分钟、4 分钟、8 分钟等
编辑:
现有代码按要求:
布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:background="@drawable/fabricc"
android:orientation="vertical"
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=".ExpCalc" >
<ImageView
android:id="@+id/apertureexample"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:contentDescription="Aperture Example Image"
android:padding="5dp"
android:adjustViewBounds="true"
android:src="@drawable/longexpcalc" />
<LinearLayout
android:id="@+id/LinearLayout02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="10dp"
android:text="Current Shutter Speed:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Spinner
android:id="@+id/Locationspinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:entries="@array/shutterspeeds_array"
android:padding="10dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/LinearLayout04"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp" >
<LinearLayout
android:id="@+id/LinearLayout0f4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1" >
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="10dp"
android:text="EV Adjustment:"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView1233"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="2dp"
android:text="(+6 = 6-stop ND Filter)"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<Spinner
android:id="@+id/evLocationspinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:entries="@array/ev_array"
android:padding="10dp" />
</LinearLayout>
<Button
android:id="@+id/CalculateEquivExposure"
style="@style/sub_menu"
android:background="@drawable/blue_menu_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="5dp"
android:text="Calculate Equivelent Exposure" />
<TextView
android:id="@+id/equivexp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:padding="40dp"
android:textSize="35sp"
android:text="1/8000" />
</LinearLayout>
爪哇:
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
public class ExpCalc extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.expcalc);
// Show the Up button in the action bar.
setupActionBar();
}
//Sets up Action Bar
private void setupActionBar() {
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.home, menu);
return true;
}
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
}
//Sets up buttons in the quick menu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
if (item.getItemId() == R.id.LessonsTutorials) {
startActivity(new Intent(this, Lessons.class));
}
if (item.getItemId() == R.id.PhotoTools) {
startActivity(new Intent(this, Tools.class));
}
if (item.getItemId() == R.id.Glossary) {
startActivity(new Intent(this, Glossary.class));
}
if (item.getItemId() == R.id.Help) {
startActivity(new Intent(this, Help.class));
}
return super.onOptionsItemSelected(item);
}
}
字符串数组:
<string-array name="shutterspeeds_array">
<item>1/8000</item>
<item>1/4000</item>
<item>1/2000</item>
<item>1/1000</item>
<item>1/500</item>
<item>1/250</item>
<item>1/125</item>
<item>1/60</item>
<item>1/30</item>
<item>1/15</item>
<item>1/8</item>
<item>1/4</item>
<item>1/2</item>
<item>1 sec</item>
<item>2 sec</item>
<item>4 sec</item>
<item>8 sec</item>
<item>15 sec</item>
<item>30 sec</item>
<item>1 min</item>
</string-array>
<string-array name="ev_array">
<item>0</item>
<item>+1</item>
<item>+2</item>
<item>+3</item>
<item>+4</item>
<item>+5</item>
<item>+6</item>
<item>+7</item>
<item>+8</item>
<item>+9</item>
<item>+10</item>
</string-array>