aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkBitmapFilter.cpp
blob: 55a7092ba7840b303375bc0dc86ea8f07fdb74d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
 * 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 "SkBitmapFilter.h"
#include "SkRTConf.h"
#include "SkTypes.h"

#include <string.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 new SkMitchellFilter(1.f / 3.f, 1.f / 3.f);
    } else if (!strcmp(c_bitmapFilter, "lanczos")) {
        return new SkLanczosFilter;
    } else if (!strcmp(c_bitmapFilter, "hamming")) {
        return new SkHammingFilter;
    } else if (!strcmp(c_bitmapFilter, "gaussian")) {
        return new SkGaussianFilter(2);
    } else if (!strcmp(c_bitmapFilter, "triangle")) {
        return new SkTriangleFilter;
    } else if (!strcmp(c_bitmapFilter, "box")) {
        return new SkBoxFilter;
    } else {
        SkDEBUGFAIL("Unknown filter type");
    }

    return nullptr;
}