導航:首頁 > 操作系統 > androidbrightness

androidbrightness

發布時間:2022-08-29 09:26:10

android 攝像頭 環境光 brightness value 怎麼提取

這里將攝像頭採集及視頻圖像繪制放在一個模塊中,比較便於管理及維護,同時在使用時,因為該類繼承自view類,所以可以向操作很多view類一樣,將其添加到任何布局中,在與採集的數據寬高比例保持一致的前提下,在頁面顯示上可以非常靈活的控制視圖尺寸大小。不過使用這種方式實現攝像頭預覽,最大的瓶頸是在旋轉yuv數據及將其轉為rgb數據時,計算比較耗時,一般情況下採集640*480數據還好,但對於960*720數據來說,手機性能一般的話,就會顯得比較卡了。解決方式在做數據旋轉時,可以嘗試採用ndk c的方式,以提高運行效率,在做yuv轉rgb時,也可以嘗試用ndk c的方式,但是最好的方式是採用gpu shader方式,直接渲染yuv數據,即將採集的yuv數據以紋理的方式上傳至gpu,然後由gpu完成yuv轉rgb並顯示。下面是相關代碼:

java">
{
//源視頻幀寬/高
privateintsrcFrameWidth=640;
privateintsrcFrameHeight=480;
privateintframeSize=srcFrameWidth*srcFrameHeight;
privateintqtrFrameSize=srcFrameWidth*srcFrameHeight>>2;

//幀預覽貼圖
privateBitmappreviewBmp=null;
privateRectpreviewRect=null;
privateCameracamera=null;
//圖層
privateBaseLayer[]layers=null;

//數據採集
privateint[]rgb_data=null;
privatebyte[]yuvdata=null;

//攝像頭前置/後置
publicstaticfinalintCAMERA_BACK=0;
publicstaticfinalintCAMERA_FRONT=1;
privateintcurCameraIndex=CAMERA_BACK;

publicCameraView(Context_context)
{
super(_context);
}

publicCameraView(Context_context,AttributeSet_attrs)
{
super(_context,_attrs);
}

publicCameraView(Contextcontext,intpreviewWidth,intpreviewHeight,intcameraIndex)
{
super(context);

curCameraIndex=cameraIndex;
rgb_data=newint[frameSize];
yuvdata=newbyte[frameSize*3/2];

previewBmp=Bitmap.createBitmap(srcFrameHeight,srcFrameWidth,Config.ARGB_8888);
previewRect=newRect(0,0,previewWidth,previewHeight);

//定義圖層
layers=newBaseLayer[2];
layers[0]=newTextLayer(context,0,false);
layers[1]=newImageLayer(context,1,false);

//文字
((TextLayer)layers[0]).setFontParams(32,Color.CYAN);
((TextLayer)layers[0]).setTextPos(100,300);
((TextLayer)layers[0]).setContent("天氣還不錯....");
layers[0].setVisible(true);

//圖像
((ImageLayer)layers[1]).setImagePos(100,150);
layers[1].setVisible(true);

//初始化並打開攝像頭
startCamera(cameraIndex);

this.setBackgroundColor(Color.parseColor("#82858b"));
}

//根據索引初始化攝像頭
publicvoidstartCamera(intcameraIndex)
{
//先停止攝像頭
stopCamera();

//再初始化並打開攝像頭
if(camera==null)
{
camera=Camera.open(cameraIndex);
Camera.Parametersparams=camera.getParameters();
params.setPreviewSize(srcFrameWidth,srcFrameHeight);
params.setPreviewFormat(ImageFormat.NV21);
camera.setParameters(params);
camera.setPreviewCallback(this);
camera.startPreview();
}
}

//停止並釋放攝像頭
publicvoidstopCamera()
{
if(camera!=null)
{
camera.setPreviewCallback(null);
camera.stopPreview();
camera.release();
camera=null;
}
}

//繪制
@Override
protectedvoidonDraw(Canvascanvas)
{
super.onDraw(canvas);

//填充數據(因為數據已經旋轉過,此時寬與高需要互換)
previewBmp.setPixels(rgb_data,0,srcFrameHeight,0,0,srcFrameHeight,srcFrameWidth);

//繪制圖層
for(BaseLayerlayer:layers)
{
if(layer.isVisible())
{
layer.drawLayer(previewBmp);
}
}

//貼圖
canvas.drawBitmap(previewBmp,null,previewRect,null);
}

//獲取攝像頭視頻數據
@Override
publicvoidonPreviewFrame(byte[]data,Cameracamera)
{
inti=0,j=0,k=0;
intuvHeight=srcFrameHeight>>1;

//旋轉yuv數據
if(curCameraIndex==CAMERA_BACK)
{
//旋轉y
for(i=0;i<srcFrameWidth;i++)
{
for(j=srcFrameHeight-1;j>=0;j--)
{
yuvdata[k]=data[srcFrameWidth*j+i];
k++;
}
}

//旋轉uv
for(i=0;i<srcFrameWidth;i+=2)
{
for(j=uvHeight-1;j>=0;j--)
{
yuvdata[k]=data[frameSize+srcFrameWidth*j+i+1];//cb/u
yuvdata[k+qtrFrameSize]=data[frameSize+srcFrameWidth*j+i];//cr/v
k++;
}
}
}
else
{
//旋轉y
for(i=srcFrameWidth-1;i>=0;i--)
{
for(j=srcFrameHeight-1;j>=0;j--)
{
yuvdata[k]=data[srcFrameWidth*j+i];
k++;
}
}

//旋轉uv
for(i=srcFrameWidth-2;i>=0;i-=2)
{
for(j=uvHeight-1;j>=0;j--)
{
yuvdata[k]=data[frameSize+srcFrameWidth*j+i+1];//cb/u
yuvdata[k+qtrFrameSize]=data[frameSize+srcFrameWidth*j+i];//cr/v
k++;
}
}
}

//yuv轉rgb(因為數據已經旋轉過,此時寬與高需要互換)
intyp=0;
for(i=0,yp=0;i<srcFrameWidth;i++)
{
intuvp=frameSize+(i>>1)*uvHeight,u=0,v=0;
for(j=0;j<srcFrameHeight;j++,yp++)
{
inty=(0xff&yuvdata[yp])-16;
if((j&1)==0)
{
u=(0xff&yuvdata[uvp+(j>>1)])-128;
v=(0xff&yuvdata[uvp+qtrFrameSize+(j>>1)])-128;
}

inty1192=1192*y;
intr=(y1192+1634*v);
intg=(y1192-833*v-400*u);
intb=(y1192+2066*u);

if(r<0)r=0;elseif(r>262143)r=262143;
if(g<0)g=0;elseif(g>262143)g=262143;
if(b<0)b=0;elseif(b>262143)b=262143;

rgb_data[i*srcFrameHeight+j]=0xff000000|((r<<6)&0xff0000)|((g>>2)&0xff00)|((b>>10)&0xff);
}//for
}//for

invalidate();
}

⑵ android 如何調控閃光燈亮度

這是與設備相關的,因為硬體廠商才能自行定義硬體的屬性。比如htc為相機閃光燈設置一個亮度文件,通過改寫這個文件的值,可以達到變更相機閃光燈的亮度,魅族應該也是這樣操作的。作為安卓系統來說,沒有統一的解決方案的。

參考htc閃光燈亮度root下的設置方法:
on 2.2 HTC devices you can use it by writing a string to/sys/devices/platform/flashlight.0/leds/flashlight/brightness. This controls if the LED is on and how bright it is. For maximum brightness write "128\n", half brightness write "64\n". Easy to test from adb shell:

安卓怎麼通過修改系統文件,使屏幕亮度值的最低亮度更低

一、所需工具

1、APKTOOLS反編譯工具;

2、配置JAVA環境;

3、Notepad++;

4、提取系統framework-res.apk文件;

二、具體操作

1、因為framework-res.apk是系統文件,我們需要首先載入系統環境,將framework-res.apk放入APKTOOLS文件夾下進行載入。如圖:

5、我們修改好以後回編譯、簽名、替換即可。

拓展資料:

反編譯framework-res.apk
打開framework-res esvaluesintegers.xml
然後找到
<integer name="config_">
10</integer> 最低亮度
<integer name="config_">
255</integer> 最高亮度
<integer name="config_">
102</integer> 開機默認亮度
<integer name="config_screenBrightnessDim"> 10</integer> 變暗值
手動修改最低亮度值即可,一般改為1。(0以下未嘗試過)。

⑷ android 怎麼設置屏幕亮度

/**
* 獲得當前屏幕亮度的模式
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 為自動調節屏幕亮度
* SCREEN_BRIGHTNESS_MODE_MANUAL=0 為手動調節屏幕亮度
*/
private int getScreenMode(){
int screenMode=0;
try{
screenMode = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
}
catch (Exception localException){

}
return screenMode;
}

/**
* 獲得當前屏幕亮度值 0--255
*/
private int getScreenBrightness(){
int screenBrightness=255;
try{
screenBrightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
}
catch (Exception localException){

}
return screenBrightness;
}
/**
* 設置當前屏幕亮度的模式
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 為自動調節屏幕亮度
* SCREEN_BRIGHTNESS_MODE_MANUAL=0 為手動調節屏幕亮度
*/
private void setScreenMode(int paramInt){
try{
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, paramInt);
}catch (Exception localException){
localException.printStackTrace();
}
}
/**
* 設置當前屏幕亮度值 0--255
*/
private void saveScreenBrightness(int paramInt){
try{
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, paramInt);
}
catch (Exception localException){
localException.printStackTrace();
}
}
/**
* 保存當前的屏幕亮度值,並使之生效
*/
private void setScreenBrightness(int paramInt){
Window localWindow = getWindow();
WindowManager.LayoutParams localLayoutParams = localWindow.getAttributes();
float f = paramInt / 255.0F;
localLayoutParams.screenBrightness = f;
localWindow.setAttributes(localLayoutParams);
}

⑸ android 應用開發如何調節閃光燈亮度

這是與設備相關的,因為硬體廠商才能自行定義硬體的屬性。比如htc為相機閃光燈設置一個亮度文件,通過改寫這個文件的值,可以達到變更相機閃光燈的亮度,魅族應該也是這樣操作的。作為安卓系統來說,沒有統一的解決方案的。

參考htc閃光燈亮度root下的設置方法:
on 2.2 HTC devices you can use it by writing a string to/sys/devices/platform/flashlight.0/leds/flashlight/brightness. This controls if the LED is on and how bright it is. For maximum brightness write "128\n", half brightness write "64\n". Easy to test from adb shell:

⑹ Android亮度調節的幾種實現方法

Android亮度調節分為三個層次,分別是:Android系統亮度調節、Android App亮度調節和Android當前屏幕(Window)亮度調節。
1.Android系統亮度調節
Android系統亮度調節全局性最高,常見於系統設置中的亮度設置項。Android中提供了獲取和設置系統亮度值(「手動模式下的亮度值」)的介面,具體如下:
// 獲取系統亮度
Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
// 設置系統亮度
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS,systemBrightness);
2.Android App亮度調節
與系統亮度不同的是,Android中並未直接提供針對於App層面的亮度調節方式。因此,對於需要進行App的亮度調節,可以通過系統亮度調節或當前屏幕的亮度調節方式間接來實現。
3.Android當前屏幕(Window)亮度調節
Android針對當前屏幕(Window)提供了設置亮度的介面,常見寫法如下:Window window = activity.getWindow();WindowManager.LayoutParams lp = window.getAttributes();lp.screenBrightness = brightness;window.setAttributes(lp);

⑺ android5.x怎麼修改屏幕亮度

首選,需要反編譯framework-res.apk,位於/system/framework/目錄下。需要改動的位置為:integers.xml此文件位於:\res\values 目錄下。

有幾個值可以自定義

1,屏幕亮度設置的最小值:

查找詞條:

config_

設置中可以調的最小亮度值。將其值修改為比5大的值。修改的過低可能點不亮屏幕。。自己斟酌。

2,屏幕亮度設置的最大值:

查找詞條:

config_

一般為255最大。不需要改。

3,屏幕亮度設置的默認值:

查找詞條:

config_

一般為102。不需要改。

4,屏幕變暗時的值:

查找詞條:

config_screenBrightnessDim

當屏幕即將關閉時的值。推薦將其值修改為比5大的值。修改的過低可能點不亮屏幕。。自己斟酌。

5,屏幕完全黑暗時的值:

查找詞條:

config_screenBrightnessDark

推薦將其修改為比5大的值。修改的過低可能點不亮屏幕。自己斟酌。‍

閱讀全文

與androidbrightness相關的資料

熱點內容
pic單片機學習網站 瀏覽:161
843除6的演算法 瀏覽:374
arduino編程視頻 瀏覽:742
pdf背景綠色 瀏覽:610
記事本dos命令 瀏覽:274
伺服器如何搭建多個節點 瀏覽:326
acx演算法 瀏覽:258
幽冥詭匠漫畫全集用什麼app可以看 瀏覽:1001
租用伺服器為什麼越來越慢 瀏覽:960
演算法創新就業方向 瀏覽:423
演算法最優解作者 瀏覽:868
通達信紅綠寶塔線指標源碼 瀏覽:667
app是什麼東西合法嗎 瀏覽:231
怎麼鎖app視頻教程 瀏覽:841
迅捷pdf注冊碼生成器 瀏覽:750
androidsdkosx 瀏覽:304
壓縮面膜紙熒光 瀏覽:841
app怎麼分身三個 瀏覽:745
電影bt下載源碼 瀏覽:422
iwatch屏幕加密晶元 瀏覽:570