2013-04-04 12 views
6

Ich habe einen Startbildschirm mit einem ImageView Teil des Hintergrunds. Unabhängig davon, ob ich meine Bitmap skalieren lasse (was ich tue), ist die Bildqualität schrecklich. Ich denke, es reduziert die Farbtiefe. Ich habe mich schon SO umgeschaut und ein Vorschlag war, mein Bild in raw statt drawable zu setzen, aber das half auch nicht. Hier ist ein Screenshot:Schreckliche ImageView Bitmap-Qualität?

enter image description here

Was genau ist hier los, und wie kann ich es beheben?

EDIT: Ich habe diese Bitmap nicht programmgesteuert angewendet, so dass es keinen relevanten Java-Code gibt. Hier ist der XML-Code für diese Aktivität:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/RelativeLayoutSplash" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:drawingCacheQuality="high" 
    android:orientation="vertical" 
    android:padding="@dimen/splash_padding" 
    android:scrollbarAlwaysDrawVerticalTrack="true" 
    tools:context=".SplashActivity" > 

    <ImageView 
     android:id="@+id/ImageViewBg" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:contentDescription="@string/logo_description" 
     android:scaleType="centerCrop" 
     android:src="@drawable/splash_bg_register" /> 

    <ImageView 
     android:id="@+id/ImageViewLogo" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:contentDescription="@string/logo_description" 
     android:maxHeight="@dimen/logo_maxheight" 
     android:maxWidth="@dimen/logo_maxwidth" 
     android:layout_centerVertical="true" 
     android:src="@drawable/logo" /> 

    <TextView 
     android:id="@+id/TextViewCopyright" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:text="@string/copyright" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:textColor="@color/white_50" 
     android:textSize="@dimen/copyright_size" /> 

</RelativeLayout> 

EDIT: Ich habe versucht, getWindow().setFormat(PixelFormat.RGBA_8888); wie vorgeschlagen, die einen sichtbaren Unterschied gemacht, aber das Banding ist noch vorhanden. This ist das Bild, das ich als Hintergrund verwende.

+7

poste deinen Code. –

+0

Entschuldigung. –

+0

Wie groß ist das Bild? –

Antwort

8

Banding tritt meistens auf, wenn das Seitenverhältnis des Bildes gestört ist.

Sie können eine beliebige der folgenden versuchen:

  1. .9.png Ihr Bild machen. In diesem Fall werden automatisch alle Dehnungen korrigiert und die Streifenbildung durchgeführt.

  2. Wenden Sie oberflächliches Dithering auf Ihr Bild an, das eine ungewöhnliche Streifenbildung verhindern könnte.

    <bitmap 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:src="@drawable/b1" 
        android:tileMode="repeat" 
        android:dither="true" /> 
    
2

Was sind die Dimensionen Ihres Bildes? Und was ist das Gerät? Was ich vermute, ist, dass die Bildgröße nicht mit der Größe der Anzeige übereinstimmt und es sich um einen falschen Ressourcen-Ordner handelt. Das Bild sieht ziemlich skaliert aus. Diese Artikel sollen Ihnen helfen, die Bildauflösung und den Ressourcenordner für verschiedene Bildschirme auszuwählen.

http://developer.android.com/guide/practices/screens_support.html

http://developer.android.com/training/multiscreen/index.html

+0

Ich habe die Frage aktualisiert, um eine Kopie des Bildes zu erstellen, das ich als Hintergrund verwende. Es ist 1000x800px. Ich teste gerade ein Galaxy S Blaze Gerät. Ich verwende eine '' XML-Ressource, die auf 'splash_bg.png' verweist. Es wird so skaliert, dass es der Höhe des Bildschirms des Zielgeräts entspricht. Die Breite ist beschnitten. –

+1

Keine Notwendigkeit, ein Bitmap-XML zu erstellen. Setzen Sie einfach das Bild und scaleType centerCrop ist korrekt. Für Galaxy Blaze erstellen Sie eine Kopie Ihres Bildes mit der Auflösung 480x800 und legen Sie es in den Drawable-Normal-HDpi-Ordner. –

2

Sie haben Fenster Farbformat einzustellen. In Ihrer Aktivität setzen Sie etwas in der Art:

+0

Dies funktionierte in gewissem Umfang. Ich kann einige sichtbare Unterschiede sehen, aber ich sehe immer noch die gleichen Banding-Artefakte. Irgendeine Idee, was als nächstes zu versuchen? –

0

Versuchen Anti-Aliasing dies möglicherweise Problem gelöst.

Erstellen Sie ein Bitmap-Zeichen mit dem folgenden XML.

1

Ich denke, die Größe des Bildes ist kleiner als der Bereich, in dem Bild angezeigt wird. Also, Bild kann skalieren und die Qualität verlieren.

What you can try is: 

1. Either put the image of similar dimension 
2. use 9 patch image (good idea) 
1

Sie müssen Ihr Bild in verschiedenen Größen, um die Größe und res/ diejenigen in entsprechende ziehbar Ordner unter

0

setzen Was Sie tun, ist das Bild in xml zu setzen, die mehr viel hängt auf, was das Bildauflösungsunterstützung für.

Es gibt eine Reihe von Ordnern für jede unterstützte Dichte von mehreren Geräten, legen Sie Ihr Bild auf einen geeigneten Ordner von dpi.

entnehmen Sie bitte diesen Link für sie http://developer.android.com/guide/practices/screens_support.html

gleiche App-Symbol zu sehen, wie zaghaft

Beispielanwendung ohne Unterstützung für unterschiedliche Dichten in anderen Ordner verhalten, wie es auf niedrig, mittel gezeigt, und eine hohe Dichte Bildschirme

Example application without support for different densities, as shown on low, medium, and high density screens.

enter image description here

Beispielanwendung mit guter Unterstützung für verschiedene Dichten (es ist unabhängig von der Dichte), wie sie auf Bildschirmen mit niedriger, mittlerer und hoher Dichte angezeigt werden.

0

Einfach zwicken, indem Sie das Bild zu einem Hintergrundbild machen. Hier ist ein Beispielcode

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/your_image" 
    />