/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkErrorInternals.h" #include "SkConvolver.h" #include "SkBitmapProcState.h" #include "SkBitmap.h" #include "SkColor.h" #include "SkColorPriv.h" #include "SkConvolver.h" #include "SkUnPreMultiply.h" #include "SkShader.h" #include "SkRTConf.h" #include "SkMath.h" // These are the per-scanline callbacks that are used when we must resort to // resampling an image as it is blitted. Typically these are used only when // the image is rotated or has some other complex transformation applied. // Scaled images will usually be rescaled directly before rasterization. SK_CONF_DECLARE(const char *, c_bitmapFilter, "bitmap.filter", "mitchell", "Which scanline bitmap filter to use [mitchell, lanczos, hamming, gaussian, triangle, box]"); SkBitmapFilter *SkBitmapFilter::Allocate() { if (!strcmp(c_bitmapFilter, "mitchell")) { return SkNEW_ARGS(SkMitchellFilter,(1.f/3.f,1.f/3.f)); } else if (!strcmp(c_bitmapFilter, "lanczos")) { return SkNEW(SkLanczosFilter); } else if (!strcmp(c_bitmapFilter, "hamming")) { return SkNEW(SkHammingFilter); } else if (!strcmp(c_bitmapFilter, "gaussian")) { return SkNEW_ARGS(SkGaussianFilter,(2)); } else if (!strcmp(c_bitmapFilter, "triangle")) { return SkNEW(SkTriangleFilter); } else if (!strcmp(c_bitmapFilter, "box")) { return SkNEW(SkBoxFilter); } else { SkDEBUGFAIL("Unknown filter type"); } return NULL; }