1a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard/* 2a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Copyright (C) 2012 The Android Open Source Project 3a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * 4a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Licensed under the Apache License, Version 2.0 (the "License"); 5a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * you may not use this file except in compliance with the License. 6a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * You may obtain a copy of the License at 7a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * 8a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * http://www.apache.org/licenses/LICENSE-2.0 9a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * 10a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * Unless required by applicable law or agreed to in writing, software 11a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * distributed under the License is distributed on an "AS IS" BASIS, 12a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * See the License for the specific language governing permissions and 14a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard * limitations under the License. 15a9f280f938b5fd5891c5cfe0999f8f1d4945d7a1nicolasroard */ 1693dfe7a1df07a64701369b480578410efb740a27nicolasroard 1793dfe7a1df07a64701369b480578410efb740a27nicolasroardpackage com.android.gallery3d.filtershow.filters; 1893dfe7a1df07a64701369b480578410efb740a27nicolasroard 1993dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Bitmap; 2093dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Canvas; 2149798939f1bc58eaf5842bbc8bc5424284ab7930John Hofordimport android.graphics.Color; 2293dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Paint; 2393dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.Path; 2493dfe7a1df07a64701369b480578410efb740a27nicolasroardimport android.graphics.RectF; 2593dfe7a1df07a64701369b480578410efb740a27nicolasroard 2649798939f1bc58eaf5842bbc8bc5424284ab7930John Hofordpublic class ImageFilterColorBorder extends ImageFilter { 2749798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford private static final String LOGTAG = "ImageFilterColorBorder"; 2892e387187a872b3b0986b378954eb611aa83fdeanicolasroard private FilterColorBorderRepresentation mParameters = null; 2949798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford Paint mPaint = new Paint(); 30655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard RectF mBounds = new RectF(); 31655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard RectF mInsideBounds = new RectF(); 32655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard Path mBorderPath = new Path(); 3393dfe7a1df07a64701369b480578410efb740a27nicolasroard 3449798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford public ImageFilterColorBorder() { 3593dfe7a1df07a64701369b480578410efb740a27nicolasroard mName = "Border"; 3649798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford } 3749798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford 3849798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford public FilterRepresentation getDefaultRepresentation() { 39655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard return new FilterColorBorderRepresentation(Color.WHITE, 3, 2); 4093dfe7a1df07a64701369b480578410efb740a27nicolasroard } 4193dfe7a1df07a64701369b480578410efb740a27nicolasroard 4292e387187a872b3b0986b378954eb611aa83fdeanicolasroard public void useRepresentation(FilterRepresentation representation) { 4349798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford FilterColorBorderRepresentation parameters = 4449798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford (FilterColorBorderRepresentation) representation; 4592e387187a872b3b0986b378954eb611aa83fdeanicolasroard mParameters = parameters; 4692e387187a872b3b0986b378954eb611aa83fdeanicolasroard } 4792e387187a872b3b0986b378954eb611aa83fdeanicolasroard 4892e387187a872b3b0986b378954eb611aa83fdeanicolasroard public FilterColorBorderRepresentation getParameters() { 4992e387187a872b3b0986b378954eb611aa83fdeanicolasroard return mParameters; 5092e387187a872b3b0986b378954eb611aa83fdeanicolasroard } 5192e387187a872b3b0986b378954eb611aa83fdeanicolasroard 522e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk private void applyHelper(Canvas canvas, int w, int h) { 5392e387187a872b3b0986b378954eb611aa83fdeanicolasroard if (getParameters() == null) { 5492e387187a872b3b0986b378954eb611aa83fdeanicolasroard return; 5592e387187a872b3b0986b378954eb611aa83fdeanicolasroard } 5649798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford float size = getParameters().getBorderSize(); 5749798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford float radius = getParameters().getBorderRadius(); 58655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard 59655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mPaint.reset(); 60655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mPaint.setColor(getParameters().getColor()); 61655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mPaint.setAntiAlias(true); 62655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mBounds.set(0, 0, w, h); 63655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mBorderPath.reset(); 64655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mBorderPath.moveTo(0, 0); 65655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard 66655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard float bs = size / 100.f * mBounds.width(); 67655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard float r = radius / 100.f * mBounds.width(); 68655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard 69655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mInsideBounds.set(mBounds.left + bs, 70655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mBounds.top + bs, mBounds.right - bs, 71655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mBounds.bottom - bs); 72655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard 73655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mBorderPath.moveTo(mBounds.left, mBounds.top); 74655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mBorderPath.lineTo(mBounds.right, mBounds.top); 75655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mBorderPath.lineTo(mBounds.right, mBounds.bottom); 76655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mBorderPath.lineTo(mBounds.left, mBounds.bottom); 77655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard mBorderPath.addRoundRect(mInsideBounds, 78655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard r, r, Path.Direction.CCW); 79655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard 80655afcf4a88cf9dcdbab708212df1dec0a4c05d6nicolasroard canvas.drawPath(mBorderPath, mPaint); 812e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 822e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 832e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk @Override 8499baf61387ab1ef15bb9db5fa3b2b55591e87059John Hoford public Bitmap apply(Bitmap bitmap, float scaleFactor, int quality) { 8549798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford Canvas canvas = new Canvas(bitmap); 8649798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford applyHelper(canvas, bitmap.getWidth(), bitmap.getHeight()); 8749798939f1bc58eaf5842bbc8bc5424284ab7930John Hoford return bitmap; 882e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk } 892e1a644f97a81931bf9b53d8bdf089bb7d4b1048Ruben Brunk 9093dfe7a1df07a64701369b480578410efb740a27nicolasroard} 91