По сути, я скремблирую все пиксели, а затем снова собираю их. Но после повторной сборки я теряю огромное количество качества изображения и цвета. Я также замечаю, что размер файла изменяется, что я считаю странным, учитывая его одинаковые пиксели.
Исходное изображение
Зашифрованное изображение
Новое расшифрованное изображение
Обратите внимание на значительную потерю цвета и информации. Я пытался сохранить его в формате 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();
}
Здесь я сохраняю изображение.
Кажется, я не могу найти, где теряю столько информации