我是Android编程的新手。现在我正在使用java for android platform进行色彩校正程序。
在程序中,我应该能够在位图上选择一个点并告诉程序它实际上是白色,程序将重新调整该位图的所有像素,以便该位图的所有颜色会是对的。
谁能告诉我怎么能这样做?我现在已经能够从位图中检索一个点并计算它的RGB,但我不知道我怎么能继续。请告诉我一些我可以阅读的例子或文章。
非常感谢你宝贵的时间。希望很快收到你的来信!
结果照片: http://www.flickr.com/photos/92325795@N02/8392038944/in/photostream
我的照片正在更新,尽管有质量/噪音/颜色,但这里和那里都有奇怪的颜色。任何人都知道我应该做什么来删除它?或者甚至更好地改进我正在使用的方法?下面是代码:
输入是要编辑的位图,inColor是要编辑的照片中鼻子的颜色,reqcolor是样本/最佳照片中我的鼻子的颜色。
public Bitmap shiftRGB(Bitmap input, int inColor, int reqColor){
int deltaR = Color.red(reqColor) - Color.red(inColor);
int deltaG = Color.green(reqColor) - Color.green(inColor);
int deltaB = Color.blue(reqColor) - Color.blue(inColor);
//--how many pixels ? --
int w = input.getWidth();
int h = input.getHeight();
//-- change em all! --
for (int i = 0 ; i < w; i++){
for (int j = 0 ; j < h ; j++ ){
int pixColor = input.getPixel(i,j);
//-- colors now ? --
int inR = Color.red(pixColor);
int inG = Color.green(pixColor);
int inB = Color.blue(pixColor);
if(inR > 255){ inR = 255;}
if(inG > 255){ inG = 255;}
if(inB > 255){ inB = 255;}
if(inR < 0){ inR = 0;}
if(inG < 0){ inG = 0;}
if(inB < 0){ inB = 0;}
//-- colors then --
input.setPixel(i,j,Color.argb(255,inR + deltaR,inG + deltaG,inB + deltaB));
}
}
return input;
}
非常感谢你的帮助!我不能再表示感谢了,而是提前感谢另一位!
答案 0 :(得分:1)
了解一些white-balancing算法。看看你是否可以实现一些。另请注意,android不提供awt.graphics / BufferedImage API,用于大多数java教程。
Android提供ColorMatrixColorFilter
,用于此类用途,discussed here。
操纵像素的基本粗略方法:
public Bitmap shiftRGB(Bitmap input, int inColor, int reqColor){
//--how much change ? --
int deltaR = Color.red(reqColor) - Color.red(inColor);
int deltaG = Color.green(reqColor) - Color.green(inColor);
int deltaB = Color.blue(reqColor) - Color.blue(inColor);
//--how many pixels ? --
int w = input.getWidth();
int h = input.getHeight();
//-- change em all! --
for (int i = 0 ; i < w; i++){
for (int j = 0 ; j < h ; j++ ){
int pixColor = input.getPixel(i,j);
//-- colors now ? --
int inR = Color.red(pixColor);
int inG = Color.green(pixColor);
int inB = Color.blue(pixColor);
//-- colors then --
input.setPixel(i,j,Color.argb(255,inR + deltaR,inG + deltaG,inB + deltaB));
}
}
//-- all done--
return input;
}