SkImageInfo GrSurface::info(SkAlphaType alphaType) const { SkColorType colorType; SkColorProfileType profileType; if (!GrPixelConfig2ColorAndProfileType(this->config(), &colorType, &profileType)) { sk_throw(); } return SkImageInfo::Make(this->width(), this->height(), colorType, alphaType, profileType); }
SkImageInfo GrMakeInfoFromTexture(GrTexture* tex, int w, int h, bool isOpaque) { #ifdef SK_DEBUG const GrSurfaceDesc& desc = tex->desc(); SkASSERT(w <= desc.fWidth); SkASSERT(h <= desc.fHeight); #endif const GrPixelConfig config = tex->config(); SkColorType ct; SkAlphaType at = isOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType; if (!GrPixelConfig2ColorAndProfileType(config, &ct, nullptr)) { ct = kUnknown_SkColorType; } return SkImageInfo::Make(w, h, ct, at); }
SkImageGenerator* SkImageGeneratorUtils::NewFromTexture(GrContext* ctx, GrTexture* tex) { #if SK_SUPPORT_GPU if (ctx && tex) { const GrSurfaceDesc desc = tex->desc(); SkColorType ct; SkColorProfileType cpt; if (!GrPixelConfig2ColorAndProfileType(desc.fConfig, &ct, &cpt)) { return nullptr; } const SkAlphaType at = kPremul_SkAlphaType; // take isOpaque from caller? SkImageInfo info = SkImageInfo::Make(desc.fWidth, desc.fHeight, ct, at, cpt); return new GeneratorFromTexture(ctx, tex, info); } #endif return nullptr; }