| Index: src/core/SkImageInfo.cpp
|
| diff --git a/src/core/SkImageInfo.cpp b/src/core/SkImageInfo.cpp
|
| index 7931358d824a151ab770812d757919368589193b..146a3aeed8b0a4a1b04af80f43cb0742e39069db 100644
|
| --- a/src/core/SkImageInfo.cpp
|
| +++ b/src/core/SkImageInfo.cpp
|
| @@ -76,3 +76,47 @@ bool SkColorTypeValidateAlphaType(SkColorType colorType, SkAlphaType alphaType,
|
| }
|
| return true;
|
| }
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////////////////////////
|
| +
|
| +#include "SkReadPixelsRec.h"
|
| +
|
| +bool SkReadPixelsRec::trim(int srcWidth, int srcHeight) {
|
| + switch (fInfo.colorType()) {
|
| + case kUnknown_SkColorType:
|
| + case kIndex_8_SkColorType:
|
| + return false;
|
| + default:
|
| + break;
|
| + }
|
| + if (NULL == fPixels || fRowBytes < fInfo.minRowBytes()) {
|
| + return false;
|
| + }
|
| + if (0 == fInfo.width() || 0 == fInfo.height()) {
|
| + return false;
|
| + }
|
| +
|
| + int x = fX;
|
| + int y = fY;
|
| + SkIRect srcR = SkIRect::MakeXYWH(x, y, fInfo.width(), fInfo.height());
|
| + if (!srcR.intersect(0, 0, srcWidth, srcHeight)) {
|
| + return false;
|
| + }
|
| +
|
| + // if x or y are negative, then we have to adjust pixels
|
| + if (x > 0) {
|
| + x = 0;
|
| + }
|
| + if (y > 0) {
|
| + y = 0;
|
| + }
|
| + // here x,y are either 0 or negative
|
| + fPixels = ((char*)fPixels - y * fRowBytes - x * fInfo.bytesPerPixel());
|
| + // the intersect may have shrunk info's logical size
|
| + fInfo = fInfo.makeWH(srcR.width(), srcR.height());
|
| + fX = srcR.x();
|
| + fY = srcR.y();
|
| +
|
| + return true;
|
| +}
|
| +
|
|
|