bilal_azam
bilal_azam

Reputation: 4800

Scaling Bitmaps Without Throwing Quality

I have created an app that actually uses flood fill algorithm to fill colors in bitmaps. I have created some bitmaps (200x200) but I don't know the exact size of bitmap that I should create, I want bitmaps to cover full screen and when I scale bitmaps, they become blur and flood fill doesn't work on them. I saw an app that used GridView to show images and click on image started new activity with image covering full screen. How can I achieve this. Attached is CustomImage that I've use to show bitmap. Any help will be appreciated. EDITED: I know that GridView doesn't scale up image to full screen, it use another image. That app behaves same for different screen size, those image fill screen of any size without effecting the quality.

public class CustomImage extends View {

public CustomImage(Context context) {
    super(context);
} // end constructor

public CustomImage(Context context, int resource_id) {
    super(context);
    mPaint = new Paint();
    mPaint.setColor(Color.WHITE);
    mPoint = new Point();
    mProgressIndicator = (ProgressIndicator) context;
    mBitmap = BitmapFactory.decodeResource(getResources(), resource_id)
            .copy(Bitmap.Config.ARGB_8888, true);

} // end constructor

@Override
protected void onDraw(Canvas canvas) {
    // draw image
    canvas.drawBitmap(mBitmap, 0, 0, mPaint);
} // end onDraw

@Override
public boolean onTouchEvent(MotionEvent event) {

    int bWidth = mBitmap.getWidth();
    int bHeight = mBitmap.getHeight();

    mPoint.x = (int) event.getX();
    mPoint.y = (int) event.getY();

    mPoint.x = (mPoint.x > bWidth) ? (bWidth - 5) : mPoint.x;
    mPoint.y = (mPoint.y > bHeight) ? (bHeight - 5) : mPoint.y;

    switch (event.getAction()) {
    // called when screen clicked i.e New touch started
    case MotionEvent.ACTION_DOWN:
        mProgressIndicator.updateProgress(0);
        new Filler(mBitmap, mPoint, mPaint.getColor(), mBitmap.getPixel(
                mPoint.x, mPoint.y), this).execute();
        invalidate();
    } // end Case
    return true;
} // end onTouchEvent

public void setColor(int color) {
    mPaint.setColor(color);
} // end setColor

} // end Class

Upvotes: 0

Views: 109

Answers (1)

intrepidkarthi
intrepidkarthi

Reputation: 3102

The GridView you have seen might be using two versions of the same image. One as a big image and another as a scaled down thumbnail image for the grid.

Upvotes: 0

Related Questions