Bitmap nach decode zu klein

D

DrLiightninG

Neues Mitglied
1
Hallo zusammen,
ich habe in meiner App ein Bitmap, welches ecodiert wird, um es auf meinen Webspace zu laden.
Später soll es beim Runterladen wieder decodiert werden. Im Grunde funktioniert das alles.
Allerdings ist das Bitmap nach dem Decodieren kleiner als vorher. Das heißt es wurden etwa zwei Drittel des Bildes abgeschnitten.
Woran kann das liegen?

Hier mein Code:

Encodieren des Bitmaps zu einem String:
Code:
public String getStringImage(Bitmap bmp){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imageBytes = baos.toByteArray();
        String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
        return encodedImage;
    }

Decodieren des Strings zu einem Bitmap:
Code:
public Bitmap getPicBitmap(String image) {
            try{
                byte [] encodeByte=Base64.decode(image, Base64.DEFAULT);
                Bitmap bitmap=BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length);
                return bitmap;
            }catch(Exception e){
                e.getMessage();
                return null;
            }
        }

So wurde ein Drawable zur Bitmap umgewandelt:
(Für Breite und Höhe wurden folgende Werte genommen:
drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight() )
Code:
public Bitmap convertToBitmap(Drawable drawable, int widthPixels, int heightPixels) {
            Bitmap mutableBitmap = Bitmap.createBitmap(widthPixels, heightPixels, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(mutableBitmap);
            drawable.setBounds(0, 0, widthPixels, heightPixels);
            drawable.draw(canvas);

            return mutableBitmap;
        }

So sieht es nach dem Decodieren aus (Es fehlt der untere Teil des Bildes):


Gruß
Jan

PS: Problem behoben! Das Problem lag nicht an meinem Code, sondern an meiner MySQL Datenbank, wo der String der Bitmap gespeichert wurde. Dort hatte ich als Typ "Blob" angegeben. Als ich dies nun in "Longblob" geändert habe, wird das komplette Bild gespeichert und geladen.
 
Zuletzt bearbeitet:
Ich verstehe dein Problem nicht ganz, aber wenn du nicht die richtige Höhe eingibst, wird der Teil abgeschnitten. Wenn Du das Bild skalieren willst, muss du anders vorgehen. Da brauchst du folgende Methode:

public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)
Bitmap | Android Developers
 
Dann ist ja alles klar.

Zwei Bemerkungen noch dazu:

a) Bilder in einer Datenbank bremsen diese enorm aus. Besser wäre es das Bild einfach in einem Verzeichnis zu speichern, und in der Datenbank nur den Pfad zur Bild. Das ist wesentlich schneller, und spart Ressourcen.

b) Der Benutzer wählt ja Bilder aus der Galerie aus ( s. Bitmap aus MySQL Datenbank wird nicht runtergeladen). Dann hast du ja auch den Pfad des Files. Dann ist es sinnvoller, das Bild als Filestream einzulesen, und direkt an den Server zu übertragen.
(Stichwort POST, Content-Type: image/jpeg , Content-Type:multipart/form-data).
Dann sparst du dir denn ganzen FooBar mit der Konvertierung der Daten. Der Weg hat mehere große Vorteile:
Ein Bitmap ist wesentlich größer als ein JEPG oder PNG, D.h. es müssen weniger Daten übertragen werden. Die Wahrscheinlichkeit, das ein ARM auftritt ist kleiner, da keine riesige Bitmaps den verfügbaren Arbeitsspeicher verstopfen. Und der wichtigste Vorteil, es ist wesentlich schneller.

Not able to send additional parameters with image using HttpURLConnection in android
 
Zuletzt bearbeitet:
Das mit der falschen Größe kann auch davon kommen, dass wahre Pixel und gerenderte Pixel auf Android nicht das selbe sind.
 
Das Problem mit der Größe hat sich erledigt. Es gab noch ein Beitrag von @DrLiightninG, den er gelöscht hat.
 

Ähnliche Themen

5
Antworten
22
Aufrufe
1.340
590239
5
S
Antworten
0
Aufrufe
565
Sergio13
S
M
  • maksimilian
Antworten
2
Aufrufe
657
maksimilian
M
Zurück
Oben Unten