OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 The Android Open Source Project | 2 * Copyright 2012 The Android Open Source Project |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkMorphologyImageFilter.h" | 8 #include "SkMorphologyImageFilter.h" |
9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 radiusY, bounds.height(), bounds.width(), | 136 radiusY, bounds.height(), bounds.width(), |
137 src.rowBytesAsPixels(), dst->rowBytesAsPixels()); | 137 src.rowBytesAsPixels(), dst->rowBytesAsPixels()); |
138 } | 138 } |
139 | 139 |
140 bool SkMorphologyImageFilter::filterImageGeneric(SkMorphologyImageFilter::Proc p
rocX, | 140 bool SkMorphologyImageFilter::filterImageGeneric(SkMorphologyImageFilter::Proc p
rocX, |
141 SkMorphologyImageFilter::Proc p
rocY, | 141 SkMorphologyImageFilter::Proc p
rocY, |
142 Proxy* proxy, | 142 Proxy* proxy, |
143 const SkBitmap& source, | 143 const SkBitmap& source, |
144 const SkMatrix& ctm, | 144 const SkMatrix& ctm, |
145 SkBitmap* dst, | 145 SkBitmap* dst, |
146 SkIPoint* offset) { | 146 SkIPoint* offset) const { |
147 SkBitmap src = source; | 147 SkBitmap src = source; |
148 SkIPoint srcOffset = SkIPoint::Make(0, 0); | 148 SkIPoint srcOffset = SkIPoint::Make(0, 0); |
149 if (getInput(0) && !getInput(0)->filterImage(proxy, source, ctm, &src, &srcO
ffset)) { | 149 if (getInput(0) && !getInput(0)->filterImage(proxy, source, ctm, &src, &srcO
ffset)) { |
150 return false; | 150 return false; |
151 } | 151 } |
152 | 152 |
153 if (src.config() != SkBitmap::kARGB_8888_Config) { | 153 if (src.config() != SkBitmap::kARGB_8888_Config) { |
154 return false; | 154 return false; |
155 } | 155 } |
156 | 156 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 } else if (height > 0) { | 207 } else if (height > 0) { |
208 callProcY(procY, src, dst, height, srcBounds); | 208 callProcY(procY, src, dst, height, srcBounds); |
209 } | 209 } |
210 offset->fX = bounds.left(); | 210 offset->fX = bounds.left(); |
211 offset->fY = bounds.top(); | 211 offset->fY = bounds.top(); |
212 return true; | 212 return true; |
213 } | 213 } |
214 | 214 |
215 bool SkErodeImageFilter::onFilterImage(Proxy* proxy, | 215 bool SkErodeImageFilter::onFilterImage(Proxy* proxy, |
216 const SkBitmap& source, const SkMatrix& c
tm, | 216 const SkBitmap& source, const SkMatrix& c
tm, |
217 SkBitmap* dst, SkIPoint* offset) { | 217 SkBitmap* dst, SkIPoint* offset) const { |
218 Proc erodeXProc = SkMorphologyGetPlatformProc(kErodeX_SkMorphologyProcType); | 218 Proc erodeXProc = SkMorphologyGetPlatformProc(kErodeX_SkMorphologyProcType); |
219 if (!erodeXProc) { | 219 if (!erodeXProc) { |
220 erodeXProc = erode<kX>; | 220 erodeXProc = erode<kX>; |
221 } | 221 } |
222 Proc erodeYProc = SkMorphologyGetPlatformProc(kErodeY_SkMorphologyProcType); | 222 Proc erodeYProc = SkMorphologyGetPlatformProc(kErodeY_SkMorphologyProcType); |
223 if (!erodeYProc) { | 223 if (!erodeYProc) { |
224 erodeYProc = erode<kY>; | 224 erodeYProc = erode<kY>; |
225 } | 225 } |
226 return this->filterImageGeneric(erodeXProc, erodeYProc, proxy, source, ctm,
dst, offset); | 226 return this->filterImageGeneric(erodeXProc, erodeYProc, proxy, source, ctm,
dst, offset); |
227 } | 227 } |
228 | 228 |
229 bool SkDilateImageFilter::onFilterImage(Proxy* proxy, | 229 bool SkDilateImageFilter::onFilterImage(Proxy* proxy, |
230 const SkBitmap& source, const SkMatrix&
ctm, | 230 const SkBitmap& source, const SkMatrix&
ctm, |
231 SkBitmap* dst, SkIPoint* offset) { | 231 SkBitmap* dst, SkIPoint* offset) const { |
232 Proc dilateXProc = SkMorphologyGetPlatformProc(kDilateX_SkMorphologyProcType
); | 232 Proc dilateXProc = SkMorphologyGetPlatformProc(kDilateX_SkMorphologyProcType
); |
233 if (!dilateXProc) { | 233 if (!dilateXProc) { |
234 dilateXProc = dilate<kX>; | 234 dilateXProc = dilate<kX>; |
235 } | 235 } |
236 Proc dilateYProc = SkMorphologyGetPlatformProc(kDilateY_SkMorphologyProcType
); | 236 Proc dilateYProc = SkMorphologyGetPlatformProc(kDilateY_SkMorphologyProcType
); |
237 if (!dilateYProc) { | 237 if (!dilateYProc) { |
238 dilateYProc = dilate<kY>; | 238 dilateYProc = dilate<kY>; |
239 } | 239 } |
240 return this->filterImageGeneric(dilateXProc, dilateYProc, proxy, source, ctm
, dst, offset); | 240 return this->filterImageGeneric(dilateXProc, dilateYProc, proxy, source, ctm
, dst, offset); |
241 } | 241 } |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
533 return SkImageFilterUtils::WrapTexture(src, rect.width(), rect.height(), dst
); | 533 return SkImageFilterUtils::WrapTexture(src, rect.width(), rect.height(), dst
); |
534 } | 534 } |
535 | 535 |
536 }; | 536 }; |
537 | 537 |
538 bool SkMorphologyImageFilter::filterImageGPUGeneric(bool dilate, | 538 bool SkMorphologyImageFilter::filterImageGPUGeneric(bool dilate, |
539 Proxy* proxy, | 539 Proxy* proxy, |
540 const SkBitmap& src, | 540 const SkBitmap& src, |
541 const SkMatrix& ctm, | 541 const SkMatrix& ctm, |
542 SkBitmap* result, | 542 SkBitmap* result, |
543 SkIPoint* offset) { | 543 SkIPoint* offset) const { |
544 SkBitmap input; | 544 SkBitmap input; |
545 SkIPoint srcOffset = SkIPoint::Make(0, 0); | 545 SkIPoint srcOffset = SkIPoint::Make(0, 0); |
546 if (!SkImageFilterUtils::GetInputResultGPU(getInput(0), proxy, src, ctm, &in
put, &srcOffset)) { | 546 if (!SkImageFilterUtils::GetInputResultGPU(getInput(0), proxy, src, ctm, &in
put, &srcOffset)) { |
547 return false; | 547 return false; |
548 } | 548 } |
549 SkIRect bounds; | 549 SkIRect bounds; |
550 input.getBounds(&bounds); | 550 input.getBounds(&bounds); |
551 bounds.offset(srcOffset); | 551 bounds.offset(srcOffset); |
552 if (!this->applyCropRect(&bounds, ctm)) { | 552 if (!this->applyCropRect(&bounds, ctm)) { |
553 return false; | 553 return false; |
(...skipping 21 matching lines...) Expand all Loading... |
575 if (!apply_morphology(input, srcBounds, type, | 575 if (!apply_morphology(input, srcBounds, type, |
576 SkISize::Make(width, height), result)) { | 576 SkISize::Make(width, height), result)) { |
577 return false; | 577 return false; |
578 } | 578 } |
579 offset->fX = bounds.left(); | 579 offset->fX = bounds.left(); |
580 offset->fY = bounds.top(); | 580 offset->fY = bounds.top(); |
581 return true; | 581 return true; |
582 } | 582 } |
583 | 583 |
584 bool SkDilateImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, cons
t SkMatrix& ctm, | 584 bool SkDilateImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, cons
t SkMatrix& ctm, |
585 SkBitmap* result, SkIPoint* offset) { | 585 SkBitmap* result, SkIPoint* offset) con
st { |
586 return this->filterImageGPUGeneric(true, proxy, src, ctm, result, offset); | 586 return this->filterImageGPUGeneric(true, proxy, src, ctm, result, offset); |
587 } | 587 } |
588 | 588 |
589 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const
SkMatrix& ctm, | 589 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const
SkMatrix& ctm, |
590 SkBitmap* result, SkIPoint* offset) { | 590 SkBitmap* result, SkIPoint* offset) cons
t { |
591 return this->filterImageGPUGeneric(false, proxy, src, ctm, result, offset); | 591 return this->filterImageGPUGeneric(false, proxy, src, ctm, result, offset); |
592 } | 592 } |
593 | 593 |
594 #endif | 594 #endif |
OLD | NEW |