編輯:關於Android編程
import java.util.ArrayList;
import java.util.List;
import org.opencv.android.JavaCameraView;
import android.R.integer;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.RectF;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Toast;
public class MTCameraView extends JavaCameraView implements AutoFocusCallback {
public MTCameraView(Context context, int attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public List getResolutionList() {
return mCamera.getParameters().getSupportedPreviewSizes();
}
public Camera.Size getResolution() {
Camera.Parameters params = mCamera.getParameters();
Camera.Size s = params.getPreviewSize();
return s;
}
public void setResolution(Camera.Size resolution) {
disconnectCamera();
connectCamera((int)resolution.width, (int)resolution.height);
}
public void focusOnTouch(MotionEvent event) {
Rect focusRect = calculateTapArea(event.getRawX(), event.getRawY(), 1f);
Rect meteringRect = calculateTapArea(event.getRawX(), event.getRawY(), 1.5f);
Camera.Parameters parameters = mCamera.getParameters();
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
if (parameters.getMaxNumFocusAreas() > 0) {
List focusAreas = new ArrayList();
focusAreas.add(new Camera.Area(focusRect, 1000));
parameters.setFocusAreas(focusAreas);
}
if (parameters.getMaxNumMeteringAreas() > 0) {
List meteringAreas = new ArrayList();
meteringAreas.add(new Camera.Area(meteringRect, 1000));
parameters.setMeteringAreas(meteringAreas);
}
mCamera.setParameters(parameters);
mCamera.autoFocus(this);
}
/**
* Convert touch position x:y to {@link Camera.Area} position -1000:-1000 to 1000:1000.
*/
private Rect calculateTapArea(float x, float y, float coefficient) {
float focusAreaSize = 300;
int areaSize = Float.valueOf(focusAreaSize * coefficient).intValue();
int centerX = (int) (x / getResolution().width - 1000);
int centerY = (int) (y / getResolution().height - 1000);
int left = clamp(centerX - areaSize / 2, -1000, 1000);
int top = clamp(centerY - areaSize / 2, -1000, 1000);
RectF rectF = new RectF(left, top, left + areaSize, top + areaSize);
return new Rect(Math.round(rectF.left), Math.round(rectF.top), Math.round(rectF.right), Math.round(rectF.bottom));
}
private int clamp(int x, int min, int max) {
if (x > max) {
return max;
}
if (x < min) {
return min;
}
return x;
}
public void setFocusMode (Context item, int type){
Camera.Parameters params = mCamera.getParameters();
List FocusModes = params.getSupportedFocusModes();
switch (type){
case 0:
if (FocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO))
params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
else
Toast.makeText(item, "Auto Mode not supported", Toast.LENGTH_SHORT).show();
break;
case 1:
if (FocusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO))
params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
else
Toast.makeText(item, "Continuous Mode not supported", Toast.LENGTH_SHORT).show();
break;
case 2:
if (FocusModes.contains(Camera.Parameters.FOCUS_MODE_EDOF))
params.setFocusMode(Camera.Parameters.FOCUS_MODE_EDOF);
else
Toast.makeText(item, "EDOF Mode not supported", Toast.LENGTH_SHORT).show();
break;
case 3:
if (FocusModes.contains(Camera.Parameters.FOCUS_MODE_FIXED))
params.setFocusMode(Camera.Parameters.FOCUS_MODE_FIXED);
else
Toast.makeText(item, "Fixed Mode not supported", Toast.LENGTH_SHORT).show();
break;
case 4:
if (FocusModes.contains(Camera.Parameters.FOCUS_MODE_INFINITY))
params.setFocusMode(Camera.Parameters.FOCUS_MODE_INFINITY);
else
Toast.makeText(item, "Infinity Mode not supported", Toast.LENGTH_SHORT).show();
break;
case 5:
if (FocusModes.contains(Camera.Parameters.FOCUS_MODE_MACRO))
params.setFocusMode(Camera.Parameters.FOCUS_MODE_MACRO);
else
Toast.makeText(item, "Macro Mode not supported", Toast.LENGTH_SHORT).show();
break;
}
mCamera.setParameters(params);
}
public void setFlashMode (Context item, int type){
Camera.Parameters params = mCamera.getParameters();
List FlashModes = params.getSupportedFlashModes();
switch (type){
case 0:
if (FlashModes.contains(Camera.Parameters.FLASH_MODE_AUTO))
params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
else
Toast.makeText(item, "Auto Mode not supported", Toast.LENGTH_SHORT).show();
break;
case 1:
if (FlashModes.contains(Camera.Parameters.FLASH_MODE_OFF))
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
else
Toast.makeText(item, "Off Mode not supported", Toast.LENGTH_SHORT).show();
break;
case 2:
if (FlashModes.contains(Camera.Parameters.FLASH_MODE_ON))
params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
else
Toast.makeText(item, "On Mode not supported", Toast.LENGTH_SHORT).show();
break;
case 3:
if (FlashModes.contains(Camera.Parameters.FLASH_MODE_RED_EYE))
params.setFlashMode(Camera.Parameters.FLASH_MODE_RED_EYE);
else
Toast.makeText(item, "Red Eye Mode not supported", Toast.LENGTH_SHORT).show();
break;
case 4:
if (FlashModes.contains(Camera.Parameters.FLASH_MODE_TORCH))
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
else
Toast.makeText(item, "Torch Mode not supported", Toast.LENGTH_SHORT).show();
break;
}
mCamera.setParameters(params);
}
@Override
public void onAutoFocus(boolean arg0, Camera arg1) {
}
}
private MTCameraView mOpenCvCameraView;
public void init() {
mOpenCvCameraView = new MTCameraView(this, -1);
mOpenCvCameraView.setCvCameraViewListener(this);
mOpenCvCameraView.setFocusable(true);
mOpenCvCameraView.setOnTouchListener(MainActivity.this);
mOpenCvCameraView.enableView();
FrameLayout frame = new FrameLayout(this);
frame.addView(mOpenCvCameraView);
setContentView(frame);
}
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
// TODO Auto-generated method stub
mOpenCvCameraView.focusOnTouch(arg1);
return true;
}private ListmResolutionList; private MenuItem[] mResolutionMenuItems; private MenuItem[] mFocusListItems; private MenuItem[] mFlashListItems; private SubMenu mResolutionMenu; private SubMenu mFocusMenu; private SubMenu mFlashMenu; @Override public boolean onCreateOptionsMenu(Menu menu) { Log.i(TAG, "called onCreateOptionsMenu"); List mFocusList = new LinkedList (); int idx =0; mFocusMenu = menu.addSubMenu("Focus"); mFocusList.add("Auto"); mFocusList.add("Continuous Video"); mFocusList.add("EDOF"); mFocusList.add("Fixed"); mFocusList.add("Infinity"); mFocusList.add("Makro"); mFocusList.add("Continuous Picture"); mFocusListItems = new MenuItem[mFocusList.size()]; ListIterator FocusItr = mFocusList.listIterator(); while(FocusItr.hasNext()){ // add the element to the mDetectorMenu submenu String element = FocusItr.next(); mFocusListItems[idx] = mFocusMenu.add(2,idx,Menu.NONE,element); idx++; } List mFlashList = new LinkedList (); idx = 0; mFlashMenu = menu.addSubMenu("Flash"); mFlashList.add("Auto"); mFlashList.add("Off"); mFlashList.add("On"); mFlashList.add("Red-Eye"); mFlashList.add("Torch"); mFlashListItems = new MenuItem[mFlashList.size()]; ListIterator FlashItr = mFlashList.listIterator(); while(FlashItr.hasNext()){ // add the element to the mDetectorMenu submenu String element = FlashItr.next(); mFlashListItems[idx] = mFlashMenu.add(3,idx,Menu.NONE,element); idx++; } mResolutionMenu = menu.addSubMenu("Resolution"); mResolutionList = mOpenCvCameraView.getResolutionList(); mResolutionMenuItems = new MenuItem[mResolutionList.size()]; ListIterator resolutionItr = mResolutionList.listIterator(); idx = 0; while(resolutionItr.hasNext()) { Camera.Size element = resolutionItr.next(); mResolutionMenuItems[idx] = mResolutionMenu.add(1, idx, Menu.NONE, Integer.valueOf((int) element.width).toString() + "x" + Integer.valueOf((int) element.height).toString()); idx++; } return true; } public boolean onOptionsItemSelected(MenuItem item) { Log.i(TAG, "called onOptionsItemSelected; selected item: " + item); if (item.getGroupId() == 1) { int id = item.getItemId(); Camera.Size resolution = mResolutionList.get(id); mOpenCvCameraView.setResolution(resolution); resolution = mOpenCvCameraView.getResolution(); String caption = Integer.valueOf((int) resolution.width).toString() + "x" + Integer.valueOf((int) resolution.height).toString(); Toast.makeText(this, caption, Toast.LENGTH_SHORT).show(); } else if (item.getGroupId()==2){ int focusType = item.getItemId(); mOpenCvCameraView.setFocusMode(this, focusType); } else if (item.getGroupId()==3){ int flashType = item.getItemId(); mOpenCvCameraView.setFlashMode(this, flashType); } return true; }
移植u-boot2012.04.1 -》2440 (一)新建單板,第一階段修改
前面分析過 u-boot1.1.6 三個階段的啟動過程,也嘗試自己寫了一個簡單的 bootloader ,是時候嘗試移植一個相對較新一點的 u-boot 了,看過韋東山老
自定義View——模擬水銀柱
由於項目需要,所以用SurfaceView寫了一個自定義View,根據曉風飛雨的溫度計源碼做了一部分修改而來,效果是雙汞柱 不廢話了 先上源碼package view;i
解決Fedora14下eclipse進行android開發,ibus提示沒有輸入窗口的方法詳解
好不容易搭建好了開發環境,可是不管怎麼按Ctr + space,ibus就是不彈出來。用鼠標點吧,上面提示沒有輸入窗口。真是操蛋!google了一圈也沒有解決辦法,我是第
Android tips(十二)--)Android開發中使用矢量圖
本文我們將介紹一些關於Android矢量圖的相關知識點。最新的項目中要求以矢量圖替代傳統的.png資源文件,所以特意學習了一下Android中的矢量圖相關概念,不得不說矢