为什么我不能渲染到持有8位灰度位图的Skia画布上

时间:2015-10-14 13:11:01

标签: skia

我正在尝试用skia做一些基本的绘图。由于我正在处理灰度图像,我想使用相应的颜色类型。我想要使​​用的最小例子是:

int main(int argc, char * const argv[])
{


    int width = 1000;
    int heigth = 1000;
    float linewidth = 10.0f;

    SkImageInfo info = SkImageInfo::Make(
        width,
        heigth,
        SkColorType::kAlpha_8_SkColorType,
        SkAlphaType::kPremul_SkAlphaType
        );

    SkBitmap img;
    img.allocPixels(info);
    SkCanvas canvas(img);
    canvas.drawColor(SK_ColorBLACK);

    SkPaint paint;
    paint.setColor(SK_ColorWHITE);
    paint.setAlpha(255);
    paint.setAntiAlias(false);
    paint.setStrokeWidth(linewidth);
    paint.setStyle(SkPaint::kStroke_Style);

    canvas.drawCircle(500.0f, 500.0f, 100.0f, paint);

    bool success = SkImageEncoder::EncodeFile("B:\\img.png", img,
        SkImageEncoder::kPNG_Type, 100);

    return 0;
}

但保存的图像不包含绘制的圆圈。如果我用kAlpha_8_SkColorType替换kN32_SkColorType,我会得到预期的结果。如何将圆绘制到8位灰度图像上?我在64位Windows机器上使用Visual Studio 2013。

kN32_SkColorType type result kAlpha_8_SkColorType result

1 个答案:

答案 0 :(得分:0)

您应该使用kGray_8_SkColorType而不是kAlpha_8_SkColorType。 用于位图掩码的kAlpha_8_SkColorType。