piotrek-5
piotrek-5
#android #androiddev #programowanie

Tworzę prosty program szyfrujący pliki graficzne. Z obrazu tworzę bitmapę:

ImageView imageView = findViewById(R.id.originalImage);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();

Potem dla każdego pixela pobieram wartości rgb:

for(int i=0; i<height; i++){
for(int j=0; j<width; j++){
int pixel = bitmap.getPixel(j, i);

imgBytes[index++] = (byte) Color.red(pixel);
imgBytes[index++] = (byte) Color.green(pixel);
imgBytes[index++] = (byte) Color.blue(pixel);
imgBytes[index++] = (byte) 0; //alpha
}
}

Szyfruję odpowiednim algorytmem, po czym odszyfrowuję i wyświetlam w ten sposób:

//dla każdego pixela:
int colorDecrypted = Color.argb(decryptedBytes[indexD++], decryptedBytes[indexD++], decryptedBytes[indexD++], decryptedBytes[indexD++]);
decryptedBitmap.setPixel(j, i, colorDecrypted );
[...]
decryptedImageView.setImageBitmap(decryptedBitmap);

Niestety finalny efekt jest taki jak na załączonym obrazku. Wygląda jakby nie było w ogóle koloru niebieskiego w wyświetlanych bitmapach. Szyfrowanie/odszyfrowanie przebiega poprawnie, problem leży w samym wyświetlaniu. Macie pomysł co może być przyczyną?
3
  • Najlepsze
  • Wszystkie komentarze
Alpha_Male
@PorryHatter: w tym względzie wszystko się zgadza, bo to jest index++ a nie ++index, więc ten index jest zwiększany o jeden po tej instrukcji.
W Twojej poprawce nadpisałby sobie 0.
POC: http://www.browxy.com/SubmittedCode/12131
1
swango
@piotrek-5 pewnie pomyliłeś kanał zielony z niebieskim
0
S.....k
S.....k
@piotrek-5: Spróbuj zobaczyć co się dzieje na prostszych danych. Zrób czteropikselowy obrazek z jednym pikselem niebieskim, zielonym, czerwonym i dajmy na to białym, i wtedy będzie Ci łatwiej analizować.
0
JohnOliver
@piotrek-5: a nie dodajesz alfy źle? na początku jest jako 4 parametr do tablicy a metoda argb ma go jako pierwszy
0
piotrek-5
piotrek-5
@JohnOliver: faktycznie, właśnie też to zauważyłem, ale po przestawieniu alphy na początek kolory nadal są złe
0
kapelusz
kapelusz
@piotrek-5: o panie a po co pixel po pixelu szyfrujesz
0
piotrek-5
piotrek-5
@Alpha_Male: @PorryHatter: @Scharnvirk: @JohnOliver:
Już chyba znalazłem co jest źle. Ten kod:

int test = 241;
0