0

私はアンドロイドプログラミングの初心者です。現在、Androidプラットフォーム用のJavaを使用して色補正プログラムを行っています。

プログラムでは、ビットマップ上のポイントを選択し、それが実際には白色であることをプログラムに伝えることができるはずです。プログラムはそのビットマップのすべてのピクセルを再調整して、そのビットマップのすべての色が正しくなるようにします。 .

どうすればこれを行うことができますか?現在、ビットマップからポイントを取得してその 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;
 }

助けてくれてどうもありがとう!事前にもう一度ありがとうと言うよりも、感謝の気持ちを表すことはできません!

4

1 に答える 1

1

いくつかのホワイトバランスアルゴリズムについて読んでください 。いくつか実装できるかどうかを確認してください。また、Android は awt.graphics / BufferedImage API を提供していないことにも注意してください。これは、Java チュートリアルの大部分で使用されています。

Android はColorMatrixColorFilter、そのような使用のためにここで説明されているを提供します。

ピクセルを操作する基本的な大雑把な方法:

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;
}
于 2013-01-14T11:33:22.453 に答える