aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gm/morphology.cpp52
-rw-r--r--src/effects/SkMorphologyImageFilter.cpp6
2 files changed, 30 insertions, 28 deletions
diff --git a/gm/morphology.cpp b/gm/morphology.cpp
index bfaa406336..29d29d0cb6 100644
--- a/gm/morphology.cpp
+++ b/gm/morphology.cpp
@@ -50,37 +50,37 @@ protected:
fOnce = true;
}
struct {
+ int fWidth, fHeight;
int fRadiusX, fRadiusY;
- bool erode;
- SkScalar fX, fY;
} samples[] = {
- { 0, 0, false, 0, 0 },
- { 0, 2, false, 140, 0 },
- { 2, 0, false, 280, 0 },
- { 2, 2, false, 420, 0 },
- { 0, 0, true, 0, 140 },
- { 0, 2, true, 140, 140 },
- { 2, 0, true, 280, 140 },
- { 2, 2, true, 420, 140 },
+ { 140, 140, 0, 0 },
+ { 140, 140, 0, 2 },
+ { 140, 140, 2, 0 },
+ { 140, 140, 2, 2 },
+ { 24, 24, 25, 25 },
};
- const char* str = "The quick brown fox jumped over the lazy dog.";
SkPaint paint;
- for (unsigned i = 0; i < SK_ARRAY_COUNT(samples); ++i) {
- if (samples[i].erode) {
- paint.setImageFilter(new SkErodeImageFilter(
- samples[i].fRadiusX,
- samples[i].fRadiusY))->unref();
- } else {
- paint.setImageFilter(new SkDilateImageFilter(
- samples[i].fRadiusX,
- samples[i].fRadiusY))->unref();
+ for (unsigned j = 0; j < 2; ++j) {
+ for (unsigned i = 0; i < SK_ARRAY_COUNT(samples); ++i) {
+ SkScalar x = SkIntToScalar(i * 140), y = SkIntToScalar(j * 140);
+ if (j) {
+ paint.setImageFilter(new SkErodeImageFilter(
+ samples[i].fRadiusX,
+ samples[i].fRadiusY))->unref();
+ } else {
+ paint.setImageFilter(new SkDilateImageFilter(
+ samples[i].fRadiusX,
+ samples[i].fRadiusY))->unref();
+ }
+ SkRect bounds = SkRect::MakeXYWH(
+ x,
+ y,
+ SkIntToScalar(samples[i].fWidth),
+ SkIntToScalar(samples[i].fHeight));
+ canvas->saveLayer(&bounds, &paint);
+ canvas->drawBitmap(fBitmap, x, y);
+ canvas->restore();
}
- SkRect bounds = SkRect::MakeXYWH(samples[i].fX,
- samples[i].fY,
- 140, 140);
- canvas->saveLayer(&bounds, &paint);
- canvas->drawBitmap(fBitmap, samples[i].fX, samples[i].fY);
- canvas->restore();
}
}
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index 09610cd145..aac6f846ea 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -30,7 +30,8 @@ static void erode(const SkPMColor* src, SkPMColor* dst,
int srcStrideX, int srcStrideY,
int dstStrideX, int dstStrideY)
{
- const SkPMColor* upperSrc = src + SkMin32(radius, width - 1) * srcStrideX;
+ radius = SkMin32(radius, width - 1);
+ const SkPMColor* upperSrc = src + radius * srcStrideX;
for (int x = 0; x < width; ++x) {
const SkPMColor* lp = src;
const SkPMColor* up = upperSrc;
@@ -77,7 +78,8 @@ static void dilate(const SkPMColor* src, SkPMColor* dst,
int srcStrideX, int srcStrideY,
int dstStrideX, int dstStrideY)
{
- const SkPMColor* upperSrc = src + SkMin32(radius, width - 1) * srcStrideX;
+ radius = SkMin32(radius, width - 1);
+ const SkPMColor* upperSrc = src + radius * srcStrideX;
for (int x = 0; x < width; ++x) {
const SkPMColor* lp = src;
const SkPMColor* up = upperSrc;