android - How to convert a Drawable to a scaled Bitmap -



android - How to convert a Drawable to a scaled Bitmap -

in imageview's ondraw struggling convert drawable object bitmap (respecting scaling). i'm loading svg file picturedrawable. i'm trying apply rounded corners image bitmapshader. in order have convert drawable bitmap. works, i'm not getting head around scaling procedure.

bitmap bitmap = bitmap.createbitmap( picture.getintrinsicwidth(), picture.getintrinsicheight(), bitmap.config.argb_8888 ) canvas canvas = new canvas( bitmap ) // scaling canvas appears work ... canvas.concat( getimagematrix() ) canvas.drawpicture( picture.getpicture, // ... not fill viewport, getwidth , getheight // values not reflect scaling new rectf( 0, 0, canvas.getwidth(), canvas.getheight() ) ) paint.setshader( new bitmapshader( bitmap, shader.tilemode.clamp, shader.tilemode.clamp ) ) canvas.drawroundrect( new rectf( 0, 0, bitmap.getwidth(), bitmap.getheight() ), radius, radius, paint )

erroneous rendering illustration centercrop scaling:

besides problem described in code comments above wondering whether might possible mask the picture/svg file drawing operations such clippath instead of heavy bitmap conversion. it'd have anti-aliased, of course.

the code written in scala , loosely translated java so, please ignore syntax errors

with pskink's reply (make image view rounded (not image)) similar question came next solution, based on savelayer approach (with minor modifications).

@override public void ondraw( canvas canvas ) { paint paint1 = new paint( paint.anti_alias_flag ) paint paint2 = new paint() paint2.setxfermode( new porterduffxfermode( mode.src_in ) ) drawable drawable = getdrawable() rectf rectangle = new rectf() rectangle.set( drawable.getbounds() ) getimagematrix.maprect( rectangle ) rectangle.offset( getpaddingleft(), getpaddingtop() ) // prevent radius beingness drawn out of canvas bounds rectangle.intersect( new rectf( 0, 0, canvas.getwidth(), canvas.getheight() ) ) int restore = canvas.savelayer( rectangle, null, canvas.all_save_flag ) canvas.drawroundrect( rectangle, radius.getvalue(), radius.getvalue(), paint1 ) canvas.savelayer( rectangle, paint2, canvas.all_save_flag ) super.ondraw( canvas ) canvas.restoretocount( restore ) }

the above code ignores object caching in class level , ignores npe getdrawable().

android android-canvas android-imageview android-bitmap androidsvg

Comments

Popular posts from this blog

xslt - DocBook 5 to PDF transform failing with error: "fo:flow" is missing child elements. Required content model: marker* -

mediawiki - How do I insert tables inside infoboxes on Wikia pages? -

Local Service User Logged into Windows -