本教程內(nèi)容來源于:http://fresco-cn.org
采用 知識(shí)共享 署名 4.0 國(guó)際 許可協(xié)議 進(jìn)行許可
有時(shí),我們想對(duì)從服務(wù)器下載,或者本地的圖片做些修改,比如在某個(gè)坐標(biāo)統(tǒng)一加個(gè)網(wǎng)格什么的。這時(shí)使用后處理器(Postprocessor)便可達(dá)到目的。
給圖片加個(gè)網(wǎng)格:
Uri uri;
Postprocessor redMeshPostprocessor = new Postprocessor() {
@Override
public String getName() {
return "redMeshPostprocessor";
}
@Override
public void process(Bitmap bitmap) {
for (int x = 0; x < bitmap.getWidth(); x+=2) {
for (int y = 0; y < bitmap.getHeight(); y+=2) {
bitmap.setPixel(x, y, Color.RED);
}
}
}
}
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
.setPostprocessor(redMeshPostprocessor)
.build();
PipelineDraweeController controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(mSimpleDraweeView.getOldController())
// other setters as you need
.build();
mSimpleDraweeView.setController(controller);
圖片在進(jìn)入后處理器(postprocessor)的圖片是原圖的一個(gè)完整拷貝,原來的圖片不受修改的影響。在5.0以前的機(jī)器上,拷貝后的圖片也在native內(nèi)存中。
在開始一個(gè)圖片顯示時(shí),即使是反復(fù)顯示同一個(gè)圖片,在每次進(jìn)行顯示時(shí),都需要指定后處理器。
對(duì)于同一個(gè)圖片,每次顯示,可以使用不同的后處理器。
如果想對(duì)同一個(gè)圖片進(jìn)行多次后處理,那么繼承[BaseRepeatedPostprocessor])(../javadoc/reference/com/facebook/imagepipeline/request/BaseRepatedPostprocessor.html)即可。該類有一個(gè)update方法,需要執(zhí)行后處理時(shí),調(diào)用該方法即可。
下面的例子展示了在運(yùn)行時(shí),后處理改變圖片網(wǎng)格的顏色:
public class MeshPostprocessor extends BaseRepeatedPostprocessor {
private int mColor = Color.TRANSPARENT;
public void setColor(int color) {
mColor = color;
update();
}
@Override
public String getName() {
return "meshPostprocessor";
}
@Override
public void process(Bitmap bitmap) {
for (int x = 0; x < bitmap.getWidth(); x+=2) {
for (int y = 0; y < bitmap.getHeight(); y+=2) {
bitmap.setPixel(x, y, mColor);
}
}
}
}
MeshPostprocessor meshPostprocessor = new MeshPostprocessor();
// setPostprocessor as in above example
// 改變顏色
meshPostprocessor.setColor(Color.RED);
meshPostprocessor.setColor(Color.BLUE);
每個(gè)image request, 仍舊只有一個(gè)Postprocessor,但是這個(gè)后處理器是狀態(tài)相關(guān)了。