1d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett/* 2d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett * Copyright 2016 Google Inc. 3d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett * 4d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett * Use of this source code is governed by a BSD-style license that can be 5d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett * found in the LICENSE file. 6d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett */ 7d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett 803a7f5fe2de9b0c886be4063533c91720ced0bf9Hal Canary#ifndef DecodeFile_DEFINED 903a7f5fe2de9b0c886be4063533c91720ced0bf9Hal Canary#define DecodeFile_DEFINED 1003a7f5fe2de9b0c886be4063533c91720ced0bf9Hal Canary 11d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett#include "SkBitmap.h" 12d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett#include "SkCodec.h" 13d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett#include "SkData.h" 14ccebcec4aca71fd17626b45f27fbe613bfa18b64reed#include "SkImage.h" 15d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett 16ccebcec4aca71fd17626b45f27fbe613bfa18b64reedstatic inline bool decode_file(const char* filename, SkBitmap* bitmap, 17ccebcec4aca71fd17626b45f27fbe613bfa18b64reed SkColorType colorType = kN32_SkColorType, 18ccebcec4aca71fd17626b45f27fbe613bfa18b64reed bool requireUnpremul = false) { 19d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett SkASSERT(kIndex_8_SkColorType != colorType); 2038d909ec2875f79952de08f36adfaac5680d2c53bungeman sk_sp<SkData> data(SkData::MakeFromFileName(filename)); 21145dbcd165d9d27298eb8888bc240e2d06a95464Ben Wagner std::unique_ptr<SkCodec> codec(SkCodec::NewFromData(data)); 22d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett if (!codec) { 23d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett return false; 24d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett } 25d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett 26d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett SkImageInfo info = codec->getInfo().makeColorType(colorType); 27d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett if (requireUnpremul && kPremul_SkAlphaType == info.alphaType()) { 28d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett info = info.makeAlphaType(kUnpremul_SkAlphaType); 29d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett } 30d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett 31d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett if (!bitmap->tryAllocPixels(info)) { 32d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett return false; 33d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett } 34d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett 35d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett return SkCodec::kSuccess == codec->getPixels(info, bitmap->getPixels(), bitmap->rowBytes()); 36d15750c0c7766ecab7022ea9b2f9e89a9132cbc2msarett} 37ccebcec4aca71fd17626b45f27fbe613bfa18b64reed 38ccebcec4aca71fd17626b45f27fbe613bfa18b64reedstatic inline sk_sp<SkImage> decode_file(const char filename[]) { 39ccebcec4aca71fd17626b45f27fbe613bfa18b64reed sk_sp<SkData> data(SkData::MakeFromFileName(filename)); 40ccebcec4aca71fd17626b45f27fbe613bfa18b64reed return data ? SkImage::MakeFromEncoded(data) : nullptr; 41ccebcec4aca71fd17626b45f27fbe613bfa18b64reed} 4203a7f5fe2de9b0c886be4063533c91720ced0bf9Hal Canary#endif // DecodeFile_DEFINED 43