編輯:關於Android編程
今天我們接著上次講的內容,介紹另一種改變圖片色彩的方法:像素;
今天通過一個例子來熟悉像素操作:實現圖片的 底片,懷舊,雕塑,這三種比較有意思的效果。
首先,上圖,勾引一下你。
然後開始:
我們知道,圖片是由眾多排列緊密的像素點構成,每一個像素點都包含四個信息,即R,G,B,A;於是,我們通過改變每個像素的這幾個值,就可以達到改變圖片色彩的目的:這就是我們的主要思路,下面我們開始代碼的編寫工作。
新建一個xml文件:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">
很簡單,四個圖片,均勻分布,分別用來顯示:原圖,底片,懷舊,雕塑
在貼代碼之前,首先發幾張圖幫助理解:
下面是實現三個效果的代碼,並有詳細的注釋:
首先:底片
public Bitmap handleNegative(Bitmap bt) {
int width = bt.getWidth();
int height = bt.getHeight();
int color;
int r, g, b, a;
Bitmap bmp = Bitmap.createBitmap(width, height, Config.ARGB_8888);
// 存放原來的像素值
int oldPix[] = new int[width * height];
int newPix[] = new int[width * height];
// 將像素值賦值給oldpix;
bt.getPixels(oldPix, 0, width, 0, 0, width, height);
// 循環取出每個像素,並對其進行更改
for (int i = 0; i < oldPix.length; i++) {
// 分別取出這個像素值對應的RGB值
color = oldPix[i];
r = Color.red(color);
g = Color.green(color);
b = Color.red(color);
a = Color.alpha(color);
// 應用底片變換公式
r = 255 - r;
g = 255 - g;
b = 255 - b;
// 檢查越界
if (r < 0) {
r = 0;
} else if (r > 255) {
r = 255;
}
if (g < 0) {
g = 0;
} else if (g > 255) {
g = 255;
}
if (b < 0) {
b = 0;
} else if (b > 255) {
b = 255;
}
newPix[i] = Color.argb(a, r, g, b);
}
bmp.setPixels(newPix, 0, width, 0, 0, width, height);
return bmp;
}
其次:懷舊
public Bitmap handleOld(Bitmap bt) {
int width = bt.getWidth();
int height = bt.getHeight();
int color;
int r, g, b, a;
Bitmap bmp = Bitmap.createBitmap(width, height, Config.ARGB_8888);
// 存放原來的像素值
int oldPix[] = new int[width * height];
int newPix[] = new int[width * height];
// 將像素值賦值給oldpix;
bt.getPixels(oldPix, 0, width, 0, 0, width, height);
// 循環取出每個像素,並對其進行更改
for (int i = 0; i < oldPix.length; i++) {
// 分別取出這個像素值對應的RGB值
color = oldPix[i];
r = Color.red(color);
g = Color.green(color);
b = Color.red(color);
a = Color.alpha(color);
// 應用底片變換公式
r = (int) (0.393*r+0.769*r+0.189*r);
g = (int) (0.349*g+0.686*g+0.189*g);
b = (int) (0.272*b+0.534*b+0.131*b);
// 檢查越界
if (r < 0) {
r = 0;
} else if (r > 255) {
r = 255;
}
if (g < 0) {
g = 0;
} else if (g > 255) {
g = 255;
}
if (b < 0) {
b = 0;
} else if (b > 255) {
b = 255;
}
newPix[i] = Color.argb(a, r, g, b);
}
bmp.setPixels(newPix, 0, width, 0, 0, width, height);
return bmp;
}
最後:雕塑
public Bitmap handleRelief(Bitmap bt) {
int width = bt.getWidth();
int height = bt.getHeight();
int color,color1;
int r, g, b, a;
int r1,g1,b1;
Bitmap bmp = Bitmap.createBitmap(width, height, Config.ARGB_8888);
// 存放原來的像素值
int oldPix[] = new int[width * height];
int newPix[] = new int[width * height];
// 將像素值賦值給oldpix;
bt.getPixels(oldPix, 0, width, 0, 0, width, height);
// 循環取出每個像素,並對其進行更改
for (int i = 0; i < oldPix.length; i++) {
// 分別取出這個像素值對應的RGB值
color = oldPix[i];
r = Color.red(color);
g = Color.green(color);
b = Color.red(color);
a = Color.alpha(color);
//注意這裡的處理:防止數組越界
color1 = oldPix[i==0?0:i-1];
r1 = Color.red(color1);
g1 = Color.green(color1);
b1 = Color.red(color1);
// 應用底片變換公式
r = r1-r+127;
g = g1-g+127;
b = b1-b+127;
// 檢查越界
if (r < 0) {
r = 0;
} else if (r > 255) {
r = 255;
}
if (g < 0) {
g = 0;
} else if (g > 255) {
g = 255;
}
if (b < 0) {
b = 0;
} else if (b > 255) {
b = 255;
}
newPix[i] = Color.argb(a, r, g, b);
}
bmp.setPixels(newPix, 0, width, 0, 0, width, height);
return bmp;
}
很容易理解了。
OpenGL ES是 OpenGL三維圖形API 的子集,針對手機、PDA和游戲主機等嵌入式設備而設計。 Ophone目前支持OpenGL ES 1.0 ,OpenGL
Google在2015的IO大會上,給我們帶來了更加詳細的Material Design設計規范,同時,也給我們帶來了全新的Android Design Support
本文是自己學習所做筆記,歡迎轉載,但請注明出處:http://blog.csdn.net/jesson20121020 在Android的UI開發中經常會遇
FragmentManager 為了管理Activity中的fragments,需要使用FragmentManager. 為了得到它,需要調用Activity中的getF