Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(738)

Side by Side Diff: skia/effects/SkKernel33MaskFilter.cpp

Issue 113827: Remove the remainder of the skia source code from the Chromium repo.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « skia/effects/SkGradientShader.cpp ('k') | skia/effects/SkLayerDrawLooper.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #include "SkKernel33MaskFilter.h"
2 #include "SkColorPriv.h"
3
4 SkMask::Format SkKernel33ProcMaskFilter::getFormat()
5 {
6 return SkMask::kA8_Format;
7 }
8
9 bool SkKernel33ProcMaskFilter::filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, SkIPoint* margin)
10 {
11 // margin???
12 dst->fImage = NULL;
13 dst->fBounds = src.fBounds;
14 dst->fBounds.inset(-1, -1);
15 dst->fFormat = SkMask::kA8_Format;
16
17 if (NULL == src.fImage)
18 return true;
19
20 dst->fRowBytes = dst->fBounds.width();
21 size_t size = dst->computeImageSize();
22 if (0 == size) {
23 return false; // too big to allocate, abort
24 }
25 dst->fImage = SkMask::AllocImage(size);
26
27 const int h = src.fBounds.height();
28 const int w = src.fBounds.width();
29 const int srcRB = src.fRowBytes;
30 const uint8_t* srcImage = src.fImage;
31 uint8_t* dstImage = dst->fImage;
32
33 uint8_t* srcRows[3];
34 uint8_t storage[3][3];
35
36 srcRows[0] = storage[0];
37 srcRows[1] = storage[1];
38 srcRows[2] = storage[2];
39
40 unsigned scale = fPercent256;
41
42 for (int y = -1; y <= h; y++)
43 {
44 uint8_t* dstRow = dstImage;
45 for (int x = -1; x <= w; x++)
46 {
47 memset(storage, 0, sizeof(storage));
48 uint8_t* storagePtr = &storage[0][0];
49
50 for (int ky = y - 1; ky <= y + 1; ky++)
51 {
52 const uint8_t* srcRow = srcImage + ky * srcRB; // may be out-of -range
53 for (int kx = x - 1; kx <= x + 1; kx++)
54 {
55 if ((unsigned)ky < (unsigned)h && (unsigned)kx < (unsigned)w )
56 *storagePtr = srcRow[kx];
57 storagePtr++;
58 }
59 }
60 int value = this->computeValue(srcRows);
61
62 if (scale < 256)
63 value = SkAlphaBlend(value, srcRows[1][1], scale);
64 *dstRow++ = SkToU8(value);
65 }
66 dstImage += dst->fRowBytes;
67 }
68 return true;
69 }
70
71 void SkKernel33ProcMaskFilter::flatten(SkFlattenableWriteBuffer& wb)
72 {
73 this->INHERITED::flatten(wb);
74 wb.write32(fPercent256);
75 }
76
77 SkKernel33ProcMaskFilter::SkKernel33ProcMaskFilter(SkFlattenableReadBuffer& rb)
78 : SkMaskFilter(rb)
79 {
80 fPercent256 = rb.readS32();
81 }
82
83 ///////////////////////////////////////////////////////////////////////////////
84
85 uint8_t SkKernel33MaskFilter::computeValue(uint8_t* const* srcRows)
86 {
87 int value = 0;
88
89 for (int i = 0; i < 3; i++)
90 for (int j = 0; j < 3; j++)
91 value += fKernel[i][j] * srcRows[i][j];
92
93 value >>= fShift;
94
95 if (value < 0)
96 value = 0;
97 else if (value > 255)
98 value = 255;
99 return (uint8_t)value;
100 }
101
102 void SkKernel33MaskFilter::flatten(SkFlattenableWriteBuffer& wb)
103 {
104 this->INHERITED::flatten(wb);
105 wb.writeMul4(fKernel, 9 * sizeof(int));
106 wb.write32(fShift);
107 }
108
109 SkFlattenable::Factory SkKernel33MaskFilter::getFactory()
110 {
111 return Create;
112 }
113
114 SkFlattenable* SkKernel33MaskFilter::Create(SkFlattenableReadBuffer& rb)
115 {
116 return new SkKernel33MaskFilter(rb);
117 }
118
119 SkKernel33MaskFilter::SkKernel33MaskFilter(SkFlattenableReadBuffer& rb)
120 : SkKernel33ProcMaskFilter(rb)
121 {
122 rb.read(fKernel, 9 * sizeof(int));
123 fShift = rb.readS32();
124 }
125
OLDNEW
« no previous file with comments | « skia/effects/SkGradientShader.cpp ('k') | skia/effects/SkLayerDrawLooper.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698