我有一张png的图片40*40,想把它的一个角(0,0)--(10,10)做个渐变。透明度从(10,10) 到 (0,0) 逐渐降低。
1.首先我用ps做了张具有羽化效果的图片,周围有渐变。
2.准备一张要处理的png图片。
3.将我们准备的图片调整到ps处理过的图片大小。
4.提取具有羽化效果的图片的alpha通道信息合并到我们的图片中取。
5.这样我们就把ps做的羽化效果复制到我们的图片中来了。
private Bitmap maskBitmap;
private Bitmap srcBitmap;
private Bitmap destBitmap;
private Bitmap tempBitmap;
int[] maskdata = new int[48*48];
int[] destdata = new int[48*48];
public Process(Context context) {
super(context);
setFocusable(true);
//读取资源。
maskBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.large);
//缩放到我们想要的文件比例。
Matrix matrix=new Matrix();
float scalex = (float)48 / (float)srcBitmap.getWidth();
float scaley = (float)48 / (float)srcBitmap.getHeight();
matrix.postScale(scalex, scaley);
tempBitmap= Bitmap.createBitmap(
srcBitmap, 0, 0, srcBitmap.getWidth(), srcBitmap.getHeight(), matrix, true);
// 创建destBitmap
destBitmap = tempBitmap.copy(Bitmap.Config.ARGB_8888, true);
int alpha;
int height = destBitmap.getHeight();
int width = destBitmap.getWidth();
//获得我们想要的dest和mask像素信息
destBitmap.getPixels(destdata, 0, width, 0, 0, width, height);
maskBitmap.getPixels(maskdata, 0, width, 0, 0, width, height);
for (int i = 0; i < width*height; i++)
{
//取得mask源数据alpha通道信息。
alpha = (maskdata >> 24) & 0xFF;
//屏蔽掉rgb信息通道。
alpha = (alpha << 24) | 0x00FFFFFF;
//合并alpha通道信息到dest源数据。
destdata = (destdata | 0xFF000000) & alpha;
}
//设置修改后的dest每个像素的信息。
destBitmap.setPixels(destdata, 0, width, 0, 0, width, height);
}
@Override protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
Paint p = new Paint();
float y = 10;
canvas.drawBitmap(maskBitmap, 10, y, p);
y += maskBitmap.getHeight() + 10;
canvas.drawBitmap(srcBitmap, 10, y, p);
y += srcBitmap.getHeight() + 10;
canvas.drawBitmap(tempBitmap, 10, y, p);
y += tempBitmap.getHeight() + 10;
canvas.drawBitmap(destBitmap, 10, y, p);
y += destBitmap.getHeight() + 10;
}
![android图像处理 - electron2008 - electron2008](http://img.ph.126.net/DHFezOMabEM2SWLdpUKhOw==/3354055822484924767.png)
待完善网友建议:这样做的话原图的alpha通道就全丢失了,应该在原有alpha的基础上做进一步透明处理。还有,这么点渐变的话不需要另外做张图load进来了,alpha值直接计算出来就可以了。
原文连接:http://blog.163.com/bluesky_07_06_1/blog/static/164440083201051211540931/