本教程內(nèi)容來源于:http://fresco-cn.org
采用 知識共享 署名 4.0 國際 許可協(xié)議 進行許可
有時,我們想對從服務(wù)器下載,或者本地的圖片做些修改,比如在某個坐標(biāo)統(tǒng)一加個網(wǎng)格什么的。這時使用后處理器(Postprocessor)便可達到目的。
給圖片加個網(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);
圖片在進入后處理器(postprocessor)的圖片是原圖的一個完整拷貝,原來的圖片不受修改的影響。在5.0以前的機器上,拷貝后的圖片也在native內(nèi)存中。
在開始一個圖片顯示時,即使是反復(fù)顯示同一個圖片,在每次進行顯示時,都需要指定后處理器。
對于同一個圖片,每次顯示,可以使用不同的后處理器。
如果想對同一個圖片進行多次后處理,那么繼承[BaseRepeatedPostprocessor])(../javadoc/reference/com/facebook/imagepipeline/request/BaseRepatedPostprocessor.html)即可。該類有一個update方法,需要執(zhí)行后處理時,調(diào)用該方法即可。
下面的例子展示了在運行時,后處理改變圖片網(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);
每個image request, 仍舊只有一個Postprocessor,但是這個后處理器是狀態(tài)相關(guān)了。