我有这样的代码:
// ...
public class MyImageView extends ImageView
public MyImageView(Context context, String value /* some other params */) {
super(context);
// some predefines
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// some preparations
try {
// here I call third party lib like:
someObj.draw(canvas);
// HERE I WANT TO CHANGE COLOR OF SOME PIXELS ACCORDING TO THEIR CURRENT COLOR
} catch (Exception e) {
e.printStackTrace();
}
}
}
代替 UPCASE 字母注释,我想根据第三方库绘制后的当前颜色更改 Canvas 上某些像素的颜色。我可以使用 canvas.drawPoint(x, y, paint)
方法来设置像素颜色,但是如何通过 (x,y)
获取某个像素的颜色?
最佳答案
我这里可能有一些东西(未经测试):
public static Bitmap getBitmap(Canvas canvas) {
// mBitmap is a private value inside Canvas.
// time for some dirty reflection:
try {
java.lang.reflect.Field field = Canvas.class.getDeclaredField("mBitmap");
field.setAccessible(true);
return (Bitmap)field.get(canvas);
}
catch (Throwable t) {
return null;
}
}
然后您可以通过以下方式访问像素:
Bitmap map = getBitmap(canvas);
if (map != null) {
int rgb = map.getPixel(100,100);
int red = android.graphics.Color.red(rgb);
...
}
关于Android,如何从 Canvas 获取像素颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12651440/