Wallpapers are larger than the screen, you can query the size the
wallpaper should have by using the WallpaperManager API.

On Thu, Jun 2, 2011 at 4:11 PM, Spooky <[email protected]> wrote:
> I've done some testing, reading, testing, reading, testing,
> reading, and so on,  since last night's post, and I have some
> updates to add.  Perhaps this will be enough information for
> someone to be able to help me figure out what's going wrong (at
> least, I really hope so!).
>
> I've added code to check the display density
> (int odpi = dm.densityDpi;) and, later, changed the code for
> resizing the image and added code to set its density to that
> of the display:
>
> Bitmap resizedBitmap =
> Bitmap.createScaledBitmap(image,newx,newy,false);
> resizedBitmap.setDensity(odpi);
>
> where newx and newy are calculated by multiplying the scale
> factor (set to the same for x and y to preserve the aspect ratio)
> by the original image's width and height, respectively.
>
> As I added these changes, one by one, I saw no change at all in
> the wallpaper it produced.  I then added code to clear the
> wallpaper, and commented out the code that added it back as a
> test.  I got a default wallpaper (yuck).  So I added back the
> code to set the wallpaper and it did so again, but still
> (obviously) no change....
>
> So I started setting the desired size and density to absurd
> values (insanely high, insanely low, etc.).  It was when I set
> the size VERY low that I discovered something:  the image *IS*
> being resized...TWICE.  The re-resized image was pixelated to
> hell and back....resetting it to a more reasonable test size got
> rid of that, and it looked "normal" (for low-res) again.
>
> After the changes, tests, etc., the new code is as follows---again,
> indentation is reduced for readability:
>
> ---------------------------  CUT HERE ---------------------------
>
> // load and resize the original image
>    Bitmap image = BitmapFactory.decodeResource(getResources(),
>        mImageIds[info.position]);
>
> // original image size == w,h
>    int w = image.getWidth();
>    int h = image.getHeight();
>
> // get display size in pixels
>    Display display = getWindowManager().getDefaultDisplay();
>    DisplayMetrics dm = new DisplayMetrics();
>    display.getMetrics(dm);
>    int nW =  dm.widthPixels;
>    int nH =  dm.heightPixels;
>    int odpi = dm.densityDpi;
>
> // I thought this might work better...it didn't.
> //  int nW = manager.getDesiredMinimumWidth();
> //  int nH = manager.getDesiredMinimumHeight();
>
> // Calculate the scale factor
>    float sW = (nW) / w;
>    float sH = (nH) / h;
>
> // do NOT fsck with the aspect ratio:  make sure we scale at 1:1
>    if (sW > sH) sW = sH;
>    if (sH > sW) sH = sW;
>
> // Now that we have our new scale ratio that protects
> // the aspect ratio, multiply it by the original dimens
> // to get the NEW image size
>    int newx = (int) (sW * w);
>    int newy = (int) (sH * h);
>
> // scale the image by the calculated scale factor
>    Bitmap resizedBitmap =
> Bitmap.createScaledBitmap(image,newx,newy,false);
>    resizedBitmap.setDensity(odpi);
>
> // Load the resized image as wallpaper
>    try {
>        manager.clear();   // test...
>        manager.setBitmap(resizedBitmap);
>        } catch (IOException e) {
>        e.printStackTrace();
>        }
>
> ---------------------------  CUT HERE ---------------------------
>
>
> It's being resized by my code first.  And then, as it's applied
> as wallpaper, it's being stretched to a point where it no longer
> fits on the screen, and only about 1/3 of the image is actually
> shown.  It is NOT carried over into the next display, either.
>
> It's the same image, resized first by my code, and then
> resized AGAIN by something else, which then sets the
> same fragment of the image  as the wallpaper on each
> display screen.
>
> Can anyone please help me out here?
>
> Later,
>   --jim
>
> --
> 73 DE N5IAL (/4)        | DMR: So fsck was originally called
> [email protected]    |      something else.
> < Running FreeBSD 7.0 > | Q:   What was it called?
> ICBM / Hurricane:       | DMR: Well, the second letter was different.
>   30.44406N 86.59909W  |    -- Dennis M. Ritchie, Usenix, June 1998.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>



-- 
Romain Guy
Android framework engineer
[email protected]

Note: please don't send private questions to me, as I don't have time
to provide private support.  All such questions should be posted on
public forums, where I and others can see and answer them

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to