Потеря качества изображения при шифровании и дешифровании изображения - PullRequest
1 голос
/ 01 мая 2020

По сути, я скремблирую все пиксели, а затем снова собираю их. Но после повторной сборки я теряю огромное количество качества изображения и цвета. Я также замечаю, что размер файла изменяется, что я считаю странным, учитывая его одинаковые пиксели.

Исходное изображение

Зашифрованное изображение

Новое расшифрованное изображение

Обратите внимание на значительную потерю цвета и информации. Я пытался сохранить его в формате PNG вместо JPEG, но это, похоже, ничего не изменило. Вот некоторый код.

    pixels = new int[width*height];
    pixelsLength = pixels.length;
    bitmap.getPixels(pixels,0,width,0,0,width,height);

Здесь я получаю массив пикселей.

private void encPhaseOne(){

    load.setImageResource(R.drawable.imgload1);
    int x;
    int y;
    for(int i = 0; i < RAND_ARRAY_SIZE-1; i+=2){
        x = arr1[i];
        y = arr1[i+1];
        rowSwap(x,y);
    }
    for(int i = 0; i < RAND_ARRAY_SIZE-1; i+=2){
        x = arr4[i];
        y = arr4[i+1];
        columnSwap(x,y);
    }
}

Выше приведен пример метода шифрования.

private void decPhaseOne(){

    load.setImageResource(R.drawable.imgload3);

    int x;
    int y;

    for(int i = RAND_ARRAY_SIZE-1; i > 0; i-=2){
        x = arr4[i];
        y = arr4[i-1];
        columnSwap(x,y);
    }
    for(int i = RAND_ARRAY_SIZE-1; i > 0; i-=2) {
        x = arr1[i];
        y = arr1[i-1];
        rowSwap(x,y);
    }
}

Это его расшифровка.

private void complete(){
    bitmap = bitmap.copy(Bitmap.Config.ARGB_8888,true);
    bitmap.setPixels(pixels,0,width,0,0,width,height);
    imgUri = getImageUri(this,bitmap);

    ContextWrapper cw = new ContextWrapper(getApplicationContext());
    File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
    File file = new File(directory, "ENCIMG" + ".JPEG");
    if (!file.exists()) {
        Log.d("path", file.toString());
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }
    }
        done();
}

Здесь я сохраняю изображение.

Кажется, я не могу найти, где теряю столько информации

...