OLD | NEW |
---|---|
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "SkBlurMask.h" | 10 #include "SkBlurMask.h" |
(...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
865 // useful for correctness comparisons. | 865 // useful for correctness comparisons. |
866 | 866 |
867 bool SkBlurMask::BlurGroundTruth(SkScalar sigma, SkMask* dst, const SkMask& src, | 867 bool SkBlurMask::BlurGroundTruth(SkScalar sigma, SkMask* dst, const SkMask& src, |
868 Style style, SkIPoint* margin) { | 868 Style style, SkIPoint* margin) { |
869 | 869 |
870 if (src.fFormat != SkMask::kA8_Format) { | 870 if (src.fFormat != SkMask::kA8_Format) { |
871 return false; | 871 return false; |
872 } | 872 } |
873 | 873 |
874 float variance = sigma * sigma; | 874 float variance = sigma * sigma; |
875 | 875 |
robertphillips
2013/09/05 13:30:38
The 4x window still had some edge effects (when co
| |
876 int windowSize = SkScalarCeil(sigma*4); | 876 int windowSize = SkScalarCeil(sigma*6); |
877 // round window size up to nearest odd number | 877 // round window size up to nearest odd number |
878 windowSize |= 1; | 878 windowSize |= 1; |
879 | 879 |
880 SkAutoTMalloc<float> gaussWindow(windowSize); | 880 SkAutoTMalloc<float> gaussWindow(windowSize); |
881 | 881 |
882 int halfWindow = windowSize >> 1; | 882 int halfWindow = windowSize >> 1; |
883 | 883 |
884 gaussWindow[halfWindow] = 1; | 884 gaussWindow[halfWindow] = 1; |
885 | 885 |
886 float windowSum = 1; | 886 float windowSum = 1; |
887 for (int x = 1 ; x <= halfWindow ; ++x) { | 887 for (int x = 1 ; x <= halfWindow ; ++x) { |
888 float gaussian = expf(-x*x / variance); | 888 float gaussian = expf(-x*x / (2*variance)); |
humper
2013/09/05 14:19:23
WHOOPS, nice catch.
| |
889 gaussWindow[halfWindow + x] = gaussWindow[halfWindow-x] = gaussian; | 889 gaussWindow[halfWindow + x] = gaussWindow[halfWindow-x] = gaussian; |
890 windowSum += 2*gaussian; | 890 windowSum += 2*gaussian; |
891 } | 891 } |
892 | 892 |
893 // leave the filter un-normalized for now; we will divide by the normalizati on | 893 // leave the filter un-normalized for now; we will divide by the normalizati on |
894 // sum later; | 894 // sum later; |
895 | 895 |
896 int pad = halfWindow; | 896 int pad = halfWindow; |
897 if (margin) { | 897 if (margin) { |
898 margin->set( pad, pad ); | 898 margin->set( pad, pad ); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1000 (void)autoCall.detach(); | 1000 (void)autoCall.detach(); |
1001 } | 1001 } |
1002 | 1002 |
1003 if (style == kInner_Style) { | 1003 if (style == kInner_Style) { |
1004 dst->fBounds = src.fBounds; // restore trimmed bounds | 1004 dst->fBounds = src.fBounds; // restore trimmed bounds |
1005 dst->fRowBytes = src.fRowBytes; | 1005 dst->fRowBytes = src.fRowBytes; |
1006 } | 1006 } |
1007 | 1007 |
1008 return true; | 1008 return true; |
1009 } | 1009 } |
OLD | NEW |