Ich bin ein Anfänger in Android Studio, und von allem bin ich besonders verwirrt in Aufgaben im Zusammenhang mit BitmapFactory.BitmapFactory getWidth() getHeight() und Pixel von der tatsächlichen Bildgröße unterscheiden sich
Das Problem, das ich habe, ist wie folgt. Wenn ich eine JPG-Datei mit Dimension (578x496) unter ziehbar Ordner einzufügen, und ich tun, um diese
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.background1));
Log.e("WIDTH", String.valueOf(mBitmap.getWidth());
Log.e("HEIGHT", String.valueOf(mBitmap.getHeight());
Was ich bekommen, ist eine Dimension von (2312x1984), die genau x4 größer als die tatsächliche Dimension. Liegt es daran, dass ich das Dateiformat als jpg und nicht als png habe?
So was habe ich mich entschlossen war
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.background1,options));
zu tun, und setzen Sie ihn dann als Hintergrund meiner Surface durch,
public class GamePanel extends SurfaceView implements SurfaceHolder.Callback {
public static final int WIDTH=578;
public static final int HEIGHT=496;
....
@Override
public void draw(Canvas canvas){
final int scaleXFactor = getWidth()/WIDTH;
final int scaleYFactor = getHeight()/HEIGHT;
if(canvas!=null){
final int savedState = canvas.save();
canvas.scale(scaleXFactor,scaleYFactor);
bg.draw(canvas);
canvas.restoreToCount(savedState);
}
}
aber canvas.scale (scaleXFactor, scaleYFactor) erlauben nur die Hintergrund passt horizontal, aber nicht vertikal. So ist es wie
--------------------------------------
| IMG |
| |
|-------------------------------------| <-Viewed as "Landscape"
| Black Empty Screen |
| |
|-------------------------------------|
Mein Verständnis so weit ist, dass Bitmap ist wirklich wichtiges Konzept in allen Arten von Anwendungen von Android Studio gemacht, und wenn sie nicht richtig umgesetzt, verursacht es Anwendung durch OOM Fehler zum Absturz zu bringen oder einfach langsam nach unten die Anwendung. Bitte werfen Sie mir ein Licht auf diesen armen Mann, Experten da draußen.
Dies liegt daran, dass Sie decodeResource() aus dem Drawable-Ordner verwenden. Ein Bild wird dann für das Gerät angepasst. Wie ist die Auflösung des Bildschirms? Obwohl ich es seltsam finde, dass es so groß wird. Stellen Sie Ihr Bild in den Ordner "Assets" und verwenden Sie die Dekodierung aus dem Stream oder so. – greenapps
@greenapps Sie waren richtig, dass es automatisch die Größe der Bitmap skaliert und skaliert mit der Auflösung des Bildschirms. Ich lege Ressourcen in den Ordner "Assets" und es funktioniert, obwohl ich nicht auf diese Weise suche –
Haben Sie einen anderen Vorschlag dabei, so dass das Bild nicht automatisch skaliert wird? Ich schätze wirklich Ihre Eingabe Mann –