为什么我无法渲染到包含 8 位灰度位图的 Skia 画布上

  • 本文关键字:位图 灰度 Skia 包含 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;
}

但是保存的图像不包含所画的圆。如果我用kN32_SkColorType代替kAlpha_8_SkColorType,我就得到了预期的结果。如何在8位灰度图像上绘制圆?我正在64位Windows机器上使用Visual Studio 2013。

kN32_SkColorType类型结果kAlpha_8_SkColorType结果

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

最新更新