日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android 滤镜录制,Android Camera 实时滤镜

發(fā)布時(shí)間:2023/12/10 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 滤镜录制,Android Camera 实时滤镜 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Android系統(tǒng)將內(nèi)置濾鏡功能

濾鏡功能有二十余種不同效果,不遜色于極受歡迎的智能手機(jī)應(yīng)用Instagram所產(chǎn)生的效果。

1、顏色矩陣 ColorMatrix

android中可以通過(guò)顏色矩陣(ColorMatrix類(lèi))方面的操作顏色,顏色矩陣是一個(gè)5x4 的矩陣。可以用來(lái)方面的修改圖片中RGBA各分量的值,顏色矩陣以一維數(shù)組的方式存儲(chǔ)如下:

[ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t ]

他通過(guò)RGBA四個(gè)通道來(lái)直接操作對(duì)應(yīng)顏色,如果會(huì)使用Photoshop就會(huì)知道有時(shí)處理圖片通過(guò)控制RGBA各顏色通道來(lái)做出特殊的效果。

這個(gè)矩陣對(duì)顏色的作用計(jì)算方式如示:

矩陣的運(yùn)算規(guī)則是矩陣A的一行乘以矩陣C的一列作為矩陣R的一行,

C矩陣是圖片中包含的ARGB信息,R矩陣是用顏色矩陣應(yīng)用于C之后的新的顏色分量,運(yùn)算結(jié)果如下:

R’ = aR + bG + cB + dA + e;

G’ = fR + gG + hB + iA + j;

B’ = kR + lG + mB + nA + o;

A’ = pR + qG + rB + sA + t;

Ps:第1~3列是控制色相的,第4列是控制透明度的,第5列是分量的增加值。

2、基本濾鏡效果的實(shí)現(xiàn):

如果我們用ColorMatrix調(diào)整RGB三種顏色的比重,就可以實(shí)現(xiàn)諸如單色、黑白的效果。

3、Lomo濾鏡效果的實(shí)現(xiàn):

改變圖像數(shù)值+遮罩

二、Android平臺(tái)濾鏡

濾鏡這個(gè)功能在目前的市場(chǎng)上應(yīng)用很廣泛,發(fā)展也非常快,總結(jié)起來(lái),基本上有以下三種應(yīng)用會(huì)包含濾鏡功能,都各有所長(zhǎng)。

#

二、相機(jī)濾鏡介紹

1、相機(jī)360鏡介紹

相機(jī)360的濾鏡特效類(lèi)別比較多,每一類(lèi)別又分為不同的特效。

其最主要的特點(diǎn)是它具有實(shí)時(shí)拍照濾鏡功能,且在關(guān)閉重新進(jìn)入后可記憶之前選擇的濾鏡。

缺點(diǎn)是濾鏡效果一般,而且選擇濾鏡的交互比較復(fù)雜,不好操作。

2、魔幻時(shí)刻相機(jī)濾鏡介紹(靜態(tài)濾鏡)

魔幻時(shí)刻相機(jī)Magic Hour是一款從ios移植過(guò)來(lái)的優(yōu)秀拍照軟件。

從其濾鏡管理和濾鏡庫(kù)的豐富程度就可以看出這款相機(jī)的偏重點(diǎn)了!具有大量的濾鏡效果且支持下載。濾鏡管理頁(yè)面很“整潔”,易操作。

三、圖片美化濾鏡

在圖片美化界,美圖秀秀是當(dāng)之無(wú)愧的NO.1,其濾鏡效果按照tab頁(yè)的方式分為幾類(lèi)供選擇,操作非常直觀,且每一種特效都會(huì)有非常漂亮的效果。

Pixlr-0-matic,這款圖片處理工具的濾鏡不管從UI設(shè)計(jì)來(lái)講還是從交互來(lái)講都非常贊,而且它的濾鏡還有增加光影效果、色相效果等功能,美化照片能力超強(qiáng)。

四、社交分享濾鏡

社交應(yīng)用也越來(lái)越注重圖片分享時(shí)的濾鏡功能。

騰訊微博的濾鏡效果如圖,交互簡(jiǎn)潔,清爽,濾鏡效果很佳,一推出便得到廣泛應(yīng)用和贊揚(yáng)。

Path是得到普遍認(rèn)可的優(yōu)秀產(chǎn)品,包括其濾鏡效果。

簡(jiǎn)潔是社交分享濾鏡的最主要特點(diǎn),path的濾鏡也承襲了這一風(fēng)格,且濾鏡效果很佳。

五、總結(jié)

1、采用實(shí)時(shí)拍照濾鏡,在成相的同時(shí)可以使用戶(hù)看到自己想要的照片效果。

2、濾鏡種類(lèi)不宜過(guò)多,把握關(guān)鍵的最受用戶(hù)喜歡的濾鏡效果,比如:素描、油畫(huà)、炫彩、老照片等經(jīng)典效果。

3、追求高質(zhì)量濾鏡效果,我們要讓每一個(gè)濾鏡都能夠使照片變得更加漂亮,而不是雞肋效果。

4、交互上盡量簡(jiǎn)潔,一目了然,避免多重選擇和切換。

七、基于Android平臺(tái)基本濾鏡算法的實(shí)現(xiàn)

1、Android提供了改變圖像數(shù)值的方法ColorMatrix,通過(guò)ColorMatrix方法可以實(shí)現(xiàn)基本濾鏡,如黑白、灰色、泛黃等效果。

2、通過(guò)ColorMatrix改變圖像數(shù)值,生成變換矩陣,利用矩陣相乘,來(lái)改變每個(gè)點(diǎn)的像素值。

Matrix =>r1 r2 r3 r4

g1 g2 g3 g4

b1 b2 b3 b4

a1 a2 a3 a4

變化以后

R’ = R?r1 + G?r2 + B?r3 + A?r4 + r5;

G’ = R?g1 + G?g2 + B?g3 + A?g4 + g5;

B’ = R?b1 + G?b2 + B?b3 + A?b4 + b5;

A’ = R?a1 + G?a2 + B?a3 + A?a4 + a5;第1~3列是控制色相的,第4列是控制透明度的,第5列是分量的增加值

3、R、G、B、A系數(shù)值變化會(huì)修改圖像的效果

(1)對(duì)角線值為1.0,其他為0時(shí),圖像保證的是原圖像

(2)對(duì)角線值若大于1.0,其他為0時(shí),圖像偏亮

(3)對(duì)角線值若小于1.0,其他為0時(shí),圖像偏暗

(4)設(shè)定圖像為灰色,通過(guò)查資料 R 0.3 G0.59 B 0.11

4、根據(jù)以上的實(shí)現(xiàn),實(shí)現(xiàn)基本濾鏡的算法是

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20public Bitmap getBlackStyle(Bitmap src){

Bitmap dst = Bitmap.createBitmap(src.getWidth(),src.getHeight(), Config.ARGB_8888);

Canvas canvas = new Canvas(dst);

ColorMatrix cm = new ColorMatrix();

//設(shè)定圖像為灰色,通過(guò)查資料 R 0.3 G0.59 B 0.11

cm.set(new float[] {

0.3f, 0.59f, 0.11f, 0, 0,

0.3f, 0.59f, 0.11f, 0, 0,

0.3f, 0.59f, 0.11f, 0, 0,

0, 0, 0, 1, 0 });

Paint paint = new Paint();

paint.setColorFilter(new ColorMatrixColorFilter(cm));

canvas.drawBitmap(src, 0, 0, paint);

// 保存圖像

canvas.save(Canvas.ALL_SAVE_FLAG);

// 存儲(chǔ)

canvas.restore();

return dst;

}

八、后濾鏡時(shí)代

在網(wǎng)上看到一些信息和相機(jī)應(yīng)用,很多相機(jī)玩家對(duì)手機(jī)相機(jī)的使用是越來(lái)越多,作為手機(jī)相機(jī)的開(kāi)發(fā)者需要有更多的創(chuàng)意和特性為手機(jī)相機(jī)添彩!如下幾點(diǎn)相機(jī)的發(fā)展方向供大家參考:

(1)實(shí)時(shí)濾鏡

VIDA 是一款來(lái)自國(guó)內(nèi)團(tuán)隊(duì)的照相應(yīng)用,它的一大特色就是實(shí)時(shí)濾鏡,在拍攝的同時(shí)你已經(jīng)可以

預(yù)覽到最終的成品。這是一個(gè)強(qiáng)化濾鏡功能的方向。和單純的加入新濾鏡不同,實(shí)時(shí)濾鏡把握住了

所見(jiàn)即所得的精髓。

(2)GIF 動(dòng)畫(huà)

GIFshop 是 一款快速制作定格動(dòng)畫(huà)的應(yīng)用。它結(jié)合了動(dòng)態(tài)畫(huà)面的敘事能力,保留了圖片的小體積特點(diǎn)。但 GIFshop 的問(wèn)題也非常突出,比起記錄生活,它更適合于創(chuàng)作一些幽默的動(dòng)態(tài)小品。一旦涉及到 “創(chuàng)作” ,用戶(hù)的門(mén)檻就被無(wú)情地提高了。但讓畫(huà)面動(dòng)起來(lái)的想法要比單純的強(qiáng)化濾鏡要走的更遠(yuǎn)一些。

(3)動(dòng)態(tài)圖片

Cinemagram 制 作出來(lái)的圖片可以只在某一特定區(qū)域中出現(xiàn)動(dòng)態(tài)效果。你可以那它創(chuàng)建那種網(wǎng)

上流行的“會(huì)動(dòng)的海報(bào)”。比起 GIFshop ,它能夠讓普通的記事照片變得有點(diǎn)魔幻。由于應(yīng)用的

構(gòu)思巧妙,因此適合套用在不同的場(chǎng)合中。用戶(hù)的門(mén)檻相對(duì)較小,但收獲卻是挺大的。我將其看作是 GIFshop 的改進(jìn)版本。

(4)聲音+圖片

Picle 是 一款讓你在拍攝相片的同時(shí)也記錄下一段音頻的應(yīng)用。它的好處是讓 “畫(huà)外音” 這一有趣的角色參與照片的敘事。相比上述應(yīng)用,Picle 進(jìn)入了另個(gè)維度,它考慮到圖片的敘事瓶頸,并試圖通過(guò)加入音頻來(lái)突破。Picle 所面臨的問(wèn)題是,它建立了一種新的格式,而這種格式目前還只能在 Picle 體系內(nèi)分享。

后濾鏡時(shí)代里各支團(tuán)隊(duì)在不同方向上設(shè)定了不同的瓶頸,并通過(guò)一定的方法來(lái)突破。思考的起點(diǎn)無(wú)一例外的定在了增強(qiáng)圖片敘事能力之上。從目前的情況來(lái)看,有一些事項(xiàng)值得注意:

· 體積:不能因?yàn)樵鰪?qiáng)了效果而變得臃腫。

· 題材:不能因?yàn)樘貏e適合某種題材而狹隘了用戶(hù)的使用場(chǎng)景。

· 格式:在現(xiàn)有流行的格式上入手,避免使用新格式。

· 門(mén)檻:在用戶(hù)利益和使用復(fù)雜度上尋求平衡。

· 多媒體:在圖片上做加法,但不能演變成拍攝視頻。相信隨著硬件技術(shù)的增強(qiáng),手機(jī)將成為一類(lèi)新的照相設(shè)備。它也許替代不了傳統(tǒng)的相機(jī),但

它卻能因?yàn)閼?yīng)用而變得不可替代。而可以預(yù)見(jiàn)的是,濾鏡不會(huì)是手機(jī)照相的最后一站。

九,基于Android平臺(tái)PS特效的自定義算法的實(shí)現(xiàn)

在ARGB顏色空間,分別使用A(Transparency)、R(Red)、G(Green)、B(Blue)四個(gè)值來(lái)描述一個(gè)像素點(diǎn),那么對(duì)于一個(gè)寬w高h(yuǎn)的圖片來(lái)說(shuō),共有wh個(gè)像素點(diǎn),可以用一個(gè)數(shù)組對(duì)象int [] pixels來(lái)表示相應(yīng)的圖片,pixels = { p1,p2,p3…}。在把各個(gè)像素點(diǎn)都用ARGB來(lái)表示,那么這張圖片就可以用一個(gè)[wh,4]的矩陣來(lái)描述:

1

2

3

4

5

6pixels = {

pa1,pr1,pg1,pb1,

pa2,pr2,pg2,pb2,

pa3,pr3,pg3,pb3,

……

}

android平臺(tái)在獲取像素方面提供了 Bitmap.getPixels 方法,我需要做的是遍歷圖像的像素點(diǎn),對(duì)每一個(gè)像素點(diǎn)進(jìn)行計(jì)算。然后將計(jì)算完的像素點(diǎn)通過(guò)Color.red/green/blue 方法處理后,將像素點(diǎn)填回Bitmap,從而得到濾鏡后的圖像。這種方式比ColorMatrix 要靈活,可以滿足PS特效的實(shí)現(xiàn)效果。

1、簡(jiǎn)單的反色濾鏡實(shí)現(xiàn)取出圖片的像素點(diǎn),然后用255減去每個(gè)像素點(diǎn),那么得到的就是一張有反色效果的圖片

算法如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31/**

* @author neil

*/

public class AntiColorFilter implements ImageFilterInterface {

private ImageData image = null; // 圖片信息類(lèi)

public AntiColorFilter(Bitmap bmp) {

image = new ImageData(bmp);

}

public ImageData imageProcess() {

int width = image.getWidth();

int height = image.getHeight();

int R, G, B, pixel;

for (int y = 0; y < height; y++) {

for (int x = 0; x < width; x++) {

R = image.getRComponent(x, y); // 獲取RGB三原色

G = image.getGComponent(x, y);

B = image.getBComponent(x, y);

R = 255 - R;

B = 255 - B;

G = 255 - G;

image.setPixelColor(x, y, R, G, B);

} // x

} // y

return image;

}

}

2、油畫(huà)濾鏡的實(shí)現(xiàn)

通過(guò)查資料了解到油畫(huà)濾鏡的算法是”用當(dāng)前點(diǎn)四周一定范圍內(nèi)任意一點(diǎn)的顏色來(lái)替代當(dāng)前點(diǎn)顏色,最常用的是隨機(jī)的采用相鄰點(diǎn)進(jìn)行替代”

算法如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26public ImageData imageProcess() {

int width = image.getWidth();

int height = image.getHeight();

int R, G, B, pixel,xx = 0,yy = 0;

for (int y = 0; y < height; y++) {

for (int x = 0; x < width; x++) {

int pos = getRandomInt(1, 10000) % Model;

xx = (x + pos) < width ? (x + pos) : (x - pos) >= 0 ? (x - pos) : x;

yy = (y + pos) < height ? (y + pos) : (y - pos) >= 0 ? (y - pos) : y;

R = image.getRComponent(xx, yy); // 獲取RGB三原色

G = image.getGComponent(xx, yy);

B = image.getBComponent(xx, yy);

image.setPixelColor(x, y, R, G, B);

} // x

} // y

return image;

}

public static int getRandomInt(int a, int b) {

int min = Math.min(a, b);

int max = Math.max(a, b);

return min + (int)(Math.random() * (max - min + 1));

}

3、冰凍濾鏡的實(shí)現(xiàn)

冰凍濾鏡的算法是將像素點(diǎn)顏色加深,每個(gè)象素都用RGB三原色來(lái)表示,(0,0,0)就是純黑,而(255,255,255)就是純白,因此將沒(méi)個(gè)像素點(diǎn)的RGB指變小,顏色就會(huì)加深

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38int width = image.getWidth();

int height = image.getHeight();

int R, G, B, pixel;

for (int y = 0; y < height; y++) {

for (int x = 0; x < width; x++) {

R = image.getRComponent(x, y); // 獲取RGB三原色

G = image.getGComponent(x, y);

B = image.getBComponent(x, y);

pixel = R - G - B;

pixel = pixel * 3 / 2;

if (pixel < 0)

pixel = -pixel;

if (pixel > 255)

pixel = 255;

R = pixel;

pixel = G - B - R;

pixel = pixel * 3 / 2;

if (pixel < 0)

pixel = -pixel;

if (pixel > 255)

pixel = 255;

G = pixel;

pixel = B - R - G;

pixel = pixel * 3 / 2;

if (pixel < 0)

pixel = -pixel;

if (pixel > 255)

pixel = 255;

B = pixel;

image.setPixelColor(x, y, R, G, B);

} // x

} // y

Android 靜態(tài)濾鏡的實(shí)現(xiàn)

一、回顧知識(shí)點(diǎn)

1、基本濾鏡效果的實(shí)現(xiàn)(黑白濾鏡)用到的技術(shù)是ColorMatrix。通過(guò)改變RGBA的系數(shù),從而改變圖像的成像效果。

2、PS濾鏡效果的實(shí)現(xiàn)(反色效果、冰凍效果、油畫(huà)效果)用到的技術(shù)是通過(guò)遍歷圖像的像素點(diǎn),設(shè)置圖像的像素點(diǎn)的RGB三原色來(lái)實(shí)現(xiàn)PS效果。

二、靜態(tài)濾鏡的實(shí)現(xiàn)

基于之前積累下來(lái)的知識(shí)點(diǎn),在對(duì)靜態(tài)濾鏡的實(shí)現(xiàn)方面做一下提升,還是從兩方面進(jìn)行實(shí)現(xiàn)。

1、基本濾鏡效果升級(jí)版 –> 偽lomo濾鏡的實(shí)現(xiàn)

step1:原始圖片

step2:ColorMatrix處理

step3:在處理后的圖片上覆蓋一層彩色lomo圖片

step4:覆蓋上彩色lomo后的效果

step5:偽lomo濾鏡效果

2、PS濾鏡效果升級(jí)版 –> 老照片濾鏡的實(shí)現(xiàn)

(1)HSL顏色標(biāo)準(zhǔn)HSL色彩模式是工業(yè)界的一種顏色標(biāo)準(zhǔn),是通過(guò)對(duì)色調(diào)(H)、飽和度(S)、亮度(L)三個(gè)顏色通道的變化以及它們相互之間的疊加來(lái)得到各式各樣的顏 色的,HSL即是代表色調(diào),飽和度,亮度三個(gè)通道的顏色,這個(gè)標(biāo)準(zhǔn)幾乎包括了人類(lèi)視力所能感知的所有顏色,是目前運(yùn)用最廣的顏色系統(tǒng)之一。

HSL色彩模式使用HSL模型為圖像中每一個(gè)像素的HSL分量分配一個(gè)0~255范圍內(nèi)的強(qiáng)度值。HSL圖像只使用三種通道,就可以使它們按照不同的比例混合,在屏幕上重現(xiàn)16777216種顏色。

在 HSL 模式下,每種 HSL 成分都可使用從 0到 255的值。(其中L是從黑(0)到白(255)漸變) 。老照片效果的總體思路是,對(duì)色調(diào)、飽和度、亮度進(jìn)行處理,而非之前的紅綠藍(lán)色調(diào)處理。

(2)算法實(shí)現(xiàn)

效果圖

HSL色彩模式

1、顏色HSLH: hue 色調(diào)

: saturation 飽和度

L: lum 亮度

2、概述HSL色彩模式是工業(yè)界的一種顏色標(biāo)準(zhǔn),是通過(guò)對(duì)色調(diào)(H)、飽和度(S)、亮度(L)三個(gè)顏色通道的變化以及它們相互之間的疊加來(lái)得到各式各樣的顏色的,HSL即是代表色調(diào),飽和度,亮度三個(gè)通道的顏色,這個(gè)標(biāo)準(zhǔn)幾乎包括了人類(lèi)視力所能感知的所有顏色,是目前運(yùn)用最廣的顏色系統(tǒng)之一。

HSL色彩模式使用HSL模型為圖像中每一個(gè)像素的HSL分量分配一個(gè)0~255范圍內(nèi)的強(qiáng)度值。HSL圖像只使用三種通道,就可以使它們按照不同的比例混合,在屏幕上重現(xiàn)16777216種顏色。

在 HSL 模式下,每種 HSL 成分都可使用從 0到 255的值。(其中L是從黑(0)到白(255)漸變) 。

3、HSL與RGB轉(zhuǎn)換

a. RGB→HSL的算法描述步驟1:把RGB值轉(zhuǎn)成【0,1】中數(shù)值。

步驟2:找出R,G和B中的最大值。

步驟3:設(shè)L=(maxcolor + mincolor)/2

步驟4:如果最大和最小的顏色值相同,即表示灰色,那么S定義為0,而H未定義并在程序中通常寫(xiě)成0。

步驟5:否則,測(cè)試L:

If L<0.5, s="(maxcolor-mincolor)/(maxcolor" +="" mincolor)="" <="" br="">

If L>=0.5, S=(maxcolor-mincolor)/(2.0-maxcolor-mincolor)

步驟6: If R=maxcolor, H=(G-B)/(maxcolor-mincolor)

If G=maxcolor, H=2.0+(B-R)/(maxcolor-mincolor)

If B=maxcolor, H=4.0+(R-G)/(maxcolor-mincolor)

步驟7:從第6步的計(jì)算看,H分成0~6區(qū)域。RGB顏色空間是一個(gè)立方體而HSL顏色空間是兩個(gè)六角形 錐體,其中的L是RGB立方體的主對(duì)角線。因此,RGB立方體的頂點(diǎn):紅、黃、綠、青、藍(lán)和品紅就成為HSL六角形的頂點(diǎn),而數(shù)值0~6就告訴我們H在哪個(gè)部分。H=H*60.0,如果H為負(fù)值,則加360。

b. HSL→RGB的算法描述步驟1:If S=0,表示灰色,定義R,G和B都為L(zhǎng).

步驟2:否則,測(cè)試L:

If L<0.5,temp2=l*(1.0+s) <="" br="">

If L>=0.5,temp2=L+S-LS

步驟3:temp1=2.0-temp2

步驟4:把H轉(zhuǎn)換到0~1。

步驟5:對(duì)于R,G,B,計(jì)算另外的臨時(shí)值temp3。方法如下:

for R, temp3=H+1.0/3.0

for G, temp3=H

for B, temp3=H-1.0/3.0

if temp3<0, temp3="temp3+1.0" <="" br="">

if temp3>1, temp3=temp3-1.0

步驟6:對(duì)于R,G,B做如下測(cè)試:

If 6.0temp3<1,color=temp1+(temp2-temp1)6.0temp3

Else if 2.0temp3<1,color=temp2 <="" br="">

Else if 3.0temp3<2, <="" br="">

color=temp1+(temp2-temp1)((2.0/3.0)-temp3)*6.0

Else color=temp1實(shí)例

HSL色彩模式與RGB色彩模式轉(zhuǎn)換代碼實(shí)現(xiàn)RGB色彩模式

HSL色彩模式

HSL色彩模式與RGB色彩模式轉(zhuǎn)換算法HSL與RGB轉(zhuǎn)換RGB類(lèi)

1

2

3

4

5

6

7public class ColorRGB {

public int r;

public int g;

public int b;

}

HSL類(lèi)

1

2

3

4

5

6

7public class ColorHSL {

public int h;

public float s;

public float l;

}

a) RGB→HSL的算法描述。步驟1:把RGB值轉(zhuǎn)成【0,1】中數(shù)值。

步驟2:找出R,G和B中的最大值。

步驟3:設(shè)L=(maxcolor + mincolor)/2

步驟4:如果最大和最小的顏色值相同,即表示灰色,那么S定義為0,而H未定義并在程 序中通常寫(xiě)成 0。

步驟5:否則,測(cè)試L:

If L<0.5, s="(maxcolor-mincolor)/(maxcolor" +="" mincolor)=""

If L>=0.5, S=(maxcolor-mincolor)/(2.0-maxcolor-mincolor)

步驟6: If R=maxcolor, H=(G-B)/(maxcolor-mincolor)

If G=maxcolor, H=2.0+(B-R)/(maxcolor-mincolor)

If B=maxcolor, H=4.0+(R-G)/(maxcolor-mincolor)

步驟7:從第6步的計(jì)算看,H分成0~6區(qū)域。RGB顏色空間是一個(gè)立方體而HSL顏色空間是兩個(gè)六角形錐體,其中的L是RGB立方體的主對(duì)角線。因此,RGB立方體的頂點(diǎn):紅、黃、綠、青、藍(lán)和品紅就成為HSL六角形的頂點(diǎn),而數(shù)值0~6就告訴我們H在哪個(gè)部分。H=H*60.0,如果H為負(fù)值,則加360。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43private static ColorHSL colorRGBToHSL(ColorRGB rgb) {

ColorHSL hsl = new ColorHSL();

float r, g, b, h, s, l;

r = rgb.r / 255.0f;

g = rgb.g / 255.0f;

b = rgb.b / 255.0f;

float maxColor = Math.max(r, Math.max(g, b));

float minColor = Math.min(r, Math.min(g, b));

if (maxColor == minColor) {

h = 0.0f;

s = 0.0f;

l = r;

} else {

l = (minColor + maxColor) / 2;

if (l < 0.5)

s = (maxColor - minColor) / (maxColor + minColor);

else

s = (float) ((maxColor - minColor) / (2.0 - maxColor -

minColor));

if (r == maxColor)

h = (g - b) / (maxColor - minColor);

else if (g == maxColor)

h = (float) (2.0 + (b - r) / (maxColor - minColor));

else

h = (float) (4.0 + (r - g) / (maxColor - minColor));

h /= 6;

if (h < 0)

h++;

}

hsl.h = (int) Math.round(h * 360.0);

hsl.s = s;

hsl.l = l;

return hsl;

}

b) HSL→RGB的算法描述步驟1:If S=0,表示灰色,定義R,G和B都為L(zhǎng).

步驟2:否則,測(cè)試L:

If L<0.5,temp2=l*(1.0+s)

If L>=0.5,temp2=L+S-LS

步驟3:temp1=2.0-temp2

步驟4:把H轉(zhuǎn)換到0~1。

步驟5:對(duì)于R,G,B,計(jì)算另外的臨時(shí)值temp3。方法如下:

for R, temp3=H+1.0/3.0

for G, temp3=H

for B, temp3=H-1.0/3.0

if temp3<0, temp3="temp3+1.0"

if temp3>1, temp3=temp3-1.0

步驟6:對(duì)于R,G,B做如下測(cè)試:

If 6.0temp3<1,color=temp1+(temp2-temp1)6.0temp3

Else if 2.0temp3<1,color=temp2

Else if 3.0temp3<2,

color=temp1+(temp2-temp1)((2.0/3.0)-temp3)*6.0

Else color=temp1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67private static ColorRGB colorHSLToRGB(ColorHSL hsl) {

ColorRGB rgb = new ColorRGB();

float r, g, b, h, s, l;

float temp1, temp2, tempr, tempg, tempb;

h = hsl.h / 360.0f;

s = hsl.s;

l = hsl.l;

if (s == 0) {

r = g = b = l;

} else {

if (l < 0.5)

temp2 = l * (1 + s);

else

temp2 = (l + s) - (l * s);

temp1 = 2 * l - temp2;

tempr = (float) (h + 1.0 / 3.0);

if (tempr > 1)

tempr--;

tempg = h;

tempb = (float) (h - 1.0 / 3.0);

if (tempb < 0)

tempb++;

// Red

if (tempr < 1.0 / 6.0)

r = (float) (temp1 + (temp2 - temp1) * 6.0 * tempr);

else if (tempr < 0.5)

r = temp2;

else if (tempr < 2.0 / 3.0)

r = (float) (temp1 + (temp2 - temp1) * ((2.0 / 3.0) - tempr)

* 6.0);

else

r = temp1;

// Green

if (tempg < 1.0 / 6.0)

g = (float) (temp1 + (temp2 - temp1) * 6.0 * tempg);

else if (tempg < 0.5)

g = temp2;

else if (tempg < 2.0 / 3.0)

g = (float) (temp1 + (temp2 - temp1) * ((2.0 / 3.0) - tempg)

* 6.0);

else

g = temp1;

// Blue

if (tempb < 1.0 / 6.0)

b = (float) (temp1 + (temp2 - temp1) * 6.0 * tempb);

else if (tempb < 0.5)

b = temp2;

else if (tempb < 2.0 / 3.0)

b = (float) (temp1 + (temp2 - temp1) * ((2.0 / 3.0) - tempb)

* 6.0);

else

b = temp1;

}

rgb.r = (int) Math.round(r * 255.0);

rgb.g = (int) Math.round(g * 255.0);

rgb.b = (int) Math.round(b * 255.0);

return rgb;

}

Android Camera可以做哪些?

1、功能拍攝相片

視頻錄制

取景器(掃描類(lèi)應(yīng)用,如人臉識(shí)別,名片識(shí)別,條形碼識(shí)別)

2、根據(jù)Camera API實(shí)現(xiàn)自己的拍照程序,共7步

Camera Preview是什么?

攝像頭返回的RAW數(shù)據(jù)經(jīng)過(guò)isp處理后形成yuv數(shù)據(jù),android系統(tǒng)將該數(shù)據(jù)繪制到取景區(qū)上,不斷繪制幀數(shù)據(jù)形成實(shí)時(shí)預(yù)覽數(shù)據(jù)。

如何獲取Camera Preview中的數(shù)據(jù)?Camera.PreviewCallback

setPreviewCallback

屏幕上顯示一個(gè)新的預(yù)覽幀時(shí)調(diào)用onPreviewFrame方法(時(shí)時(shí)獲取)

setPreviewCallbackWithBuffer

其與setPreviewCallback的工作方式相同,但要求指定一個(gè)字節(jié)數(shù)

組作為緩沖區(qū),用于預(yù)覽圖像數(shù)據(jù)(addCallbackBuffer)

Android Camera 實(shí)時(shí)濾鏡怎么做?

YUV轉(zhuǎn)RGB的算法,轉(zhuǎn)換的公式一般如下,也是線性的關(guān)系:?

R = Y + 1.14V

G = Y - 0.39U - 0.58V

B = Y + 2.03U

問(wèn)題?

1、屏幕卡頓,用戶(hù)體驗(yàn)低

2、性能低,影響系統(tǒng)性能

如何優(yōu)化?提高流程度

圖像渲染采用OpenGL ES SurfaceTexture

提高性能

GPU優(yōu)化

總結(jié)

以上是生活随笔為你收集整理的android 滤镜录制,Android Camera 实时滤镜的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。