Как я могу реализовать панель поиска для изменения контраста

Я пытаюсь реализовать панель поиска, чтобы изменить контрастность изображения в Android. Кто-нибудь, помогите мне реализовать это, пожалуйста. Есть ли другие варианты обработки изображений? Кто-нибудь знает решение, пожалуйста, помогите мне

Заранее спасибо.

КОД:

    public class MainActivity extends ActionBarActivity {
    ImageView imViewAndroid;
    private SeekBar seekbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekbar = (SeekBar) findViewById(R.id.seekbar);
        imViewAndroid = (ImageView) findViewById(R.id.imViewAndroid);


        seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                imViewAndroid.setImageBitmap(takeContrast(BitmapFactory.decodeResource(getResources(), R.drawable.dicom), 100));
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

    }
  public  Bitmap takeContrast(Bitmap src, double value) {
        // src image size
        int width = src.getWidth();
        int height = src.getHeight();
        // create output bitmap with original size
        Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig());
        // color information
        int A, R, G, B;
        int pixel;
        // get contrast value
        double contrast = Math.pow((100 + value) / 100, 2);

        // scan through all pixels
        for(int x = 0; x < width; ++x) {
            for(int y = 0; y < height; ++y) {
                // get pixel color
                pixel = src.getPixel(x, y);
                A = Color.alpha(pixel);
                // apply filter contrast for every channel R, G, B
                R = Color.red(pixel);
                R = (int)(((((R / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
                if(R < 0) { R = 0; }
                else if(R > 255) { R = 255; }

                G = Color.red(pixel);
                G = (int)(((((G / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
                if(G < 0) { G = 0; }
                else if(G > 255) { G = 255; }

                B = Color.red(pixel);
                B = (int)(((((B / 255.0) - 0.5) * contrast) + 0.5) * 255.0);
                if(B < 0) { B = 0; }
                else if(B > 255) { B = 255; }

                // set new pixel color to output bitmap
                bmOut.setPixel(x, y, Color.argb(A, R, G, B));
            }
        }

        // return final image
        return bmOut;
    }

person Vinayaka    schedule 15.05.2015    source источник


Ответы (2)


  1. Вы вызываете функцию для изменения контраста не в том месте, где она должна быть

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
        // call the method here, default progress is <0, 100>
    }
    
  2. Вы используете очень медленную функцию для изменения контраста. В StackOverflow уже есть много ответов, посмотрите этот ответ. Поищите, прежде чем спрашивать.

Посмотрите на эту полную реализацию на моем github.

person Lamorak    schedule 15.05.2015
comment
могу ли я позвонить так imViewAndroid.setImageBitmap (changeBitmapContrastBrightness (0, 100)); Если какая-либо ошибка, пожалуйста, исправьте меня - person Vinayaka; 15.05.2015
comment
Лучше так: changeBitmapContrastBrightness(bitmap, (float) progress / 100f, 0.5f) - person Lamorak; 15.05.2015
comment
это правильно ? растровое изображение стало красного цвета imViewAndroid.setImageBitmap(changeBitmapContrastBrightness(bitmap, (float) i/100f, 0.5f)); - person Vinayaka; 15.05.2015
comment
добавлена ​​ссылка на полный проект - person Lamorak; 15.05.2015
comment
Но некоторые сомнения в реализации панели поиска - person Vinayaka; 16.05.2015

Приведенный выше код занимает слишком много времени для обработки изображения. Если вы используете мой код, обработка изображения занимает очень меньше времени.

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
    contrastAndBrightnessControler(bitmap,seekbar.getProgress()/10,0.7)
}


public static Bitmap contrastAndBrightnessControler(Bitmap bitmap, float contrast, float brightness)
{
    ColorMatrix cmatrix = new ColorMatrix(new float[]
    {
        contrast, 0, 0, 0, brightness,
        0, contrast, 0, 0, brightness,
        0, 0, contrast, 0, brightness,
        0, 0, 0, 1, 0
    });
    Bitmap ret =Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), bitmap.getConfig());
    Canvas canvas = new Canvas(ret);
    Paint paint = new Paint();
    paint.setColorFilter(new ColorMatrixColorFilter(cmatrix));
    canvas.drawBitmap(bitmap, 0, 0, paint);
    return ret;
}
person saibaba vali    schedule 29.02.2016