Problem med att skala bitmap och sätta wallpaper

Diskussion i 'Frågor, support och diskussion' startad av mrmozart, 21 februari 2010.

  1. mrmozart

    mrmozart Teen Droid Medlem

    Blev medlem:
    9 juli 2009
    Inlägg:
    279
    Mottagna gillanden:
    1

    MINA ENHETER

    Hej hej,
    Har i en av mina applikationer en funktion för att sätta en valfri bitmap som wallpaper. För att göra detta behöver jag skala om bitmap-filen så att den passar bakgrunden. Jag försöker först ställa in höjden och skalar därefter om utifall bredden är för liten.

    Allt ser bra ut när jag debuggar så till vida att height och width blir korrekt för den nya bitmapen. Men när jag sätter den som wallpaper och går ut och tittar på hemskärmen är den omskalad och stämmer alls inte med mina värden.

    Någon som har en idé kring detta?

    Kod:
    final WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
    try {
    	DisplayMetrics dm = new DisplayMetrics();
    	getWindowManager().getDefaultDisplay().getMetrics(dm);
    
    	int screenWidth = dm.widthPixels;
    	int screenHeight = dm.heightPixels; 
    				
    	int width = bitmap.getWidth();
    	int height = bitmap.getHeight();
    		        
    	float ratio = ((float)screenHeight) / height;
    		       
    	int newHeight = screenHeight;
    	int newWidth = Math.round(ratio * width);
    		        
    	if(newWidth < screenWidth){
    	       newWidth = screenWidth;
    	       newHeight = Math.round(screenWidth / ratio * height);
            }
         
            float scaleWidth = ((float) newWidth) / width;
    	float scaleHeight = ((float) newHeight) / height;
    		       
    	Matrix matrix = new Matrix();
    	matrix.postScale(scaleWidth, scaleHeight);
    
    	Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
            resizedBitmap.getHeight();
            resizedBitmap.getWidth();
    				
    	wallpaperManager.setBitmap(resizedBitmap); 
    } catch( Exception e ) {
    	e.printStackTrace();
    } 
    
    Höjd och bredd stämmer alltså precis med värden jag vill ha:
    resizedBitmap.getHeight();
    resizedBitmap.getWidth();

    Men det blir ändå fel när bakgrunden är satt.
     
  2. mrmozart

    mrmozart Teen Droid Medlem

    Blev medlem:
    9 juli 2009
    Inlägg:
    279
    Mottagna gillanden:
    1

    MINA ENHETER

    Aha, hittade felet. Wallpapers ska inte vara 800x480 utan 800x960. Fungerar alla mobiler på det sättet att de ska ha dubbla skärmbredden på wallpapers?
     
    Last edited: 21 februari 2010
  3. Frojd

    Frojd Adult Droid Medlem

    Blev medlem:
    5 juli 2009
    Inlägg:
    551
    Mottagna gillanden:
    7

    MINA ENHETER

    Ja, eftersom det från början fanns 3 hemskärmar och bakgrunden rörde sig hälften så långt som ikonerna.