Resources.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. * Copyright 2014 Google Inc.
  3. *
  4. * Use of this source code is governed by a BSD-style license that can be
  5. * found in the LICENSE file.
  6. */
  7. #include "include/core/SkBitmap.h"
  8. #include "include/core/SkData.h"
  9. #include "include/core/SkImage.h"
  10. #include "include/core/SkImageGenerator.h"
  11. #include "include/core/SkStream.h"
  12. #include "include/core/SkTypeface.h"
  13. #include "src/core/SkOSFile.h"
  14. #include "src/utils/SkOSPath.h"
  15. #include "tools/ResourceFactory.h"
  16. #include "tools/Resources.h"
  17. #include "tools/flags/CommandLineFlags.h"
  18. static DEFINE_string2(resourcePath, i, "resources",
  19. "Directory with test resources: images, fonts, etc.");
  20. sk_sp<SkData> (*gResourceFactory)(const char*) = nullptr;
  21. SkString GetResourcePath(const char* resource) {
  22. return SkOSPath::Join(FLAGS_resourcePath[0], resource);
  23. }
  24. void SetResourcePath(const char* resource) {
  25. FLAGS_resourcePath.set(0, resource);
  26. }
  27. bool DecodeDataToBitmap(sk_sp<SkData> data, SkBitmap* dst) {
  28. std::unique_ptr<SkImageGenerator> gen(SkImageGenerator::MakeFromEncoded(std::move(data)));
  29. return gen && dst->tryAllocPixels(gen->getInfo()) &&
  30. gen->getPixels(gen->getInfo().makeColorSpace(nullptr), dst->getPixels(), dst->rowBytes());
  31. }
  32. std::unique_ptr<SkStreamAsset> GetResourceAsStream(const char* resource) {
  33. auto data = GetResourceAsData(resource);
  34. return data ? std::unique_ptr<SkStreamAsset>(new SkMemoryStream(std::move(data)))
  35. : nullptr;
  36. }
  37. sk_sp<SkData> GetResourceAsData(const char* resource) {
  38. if (sk_sp<SkData> data = gResourceFactory
  39. ? gResourceFactory(resource)
  40. : SkData::MakeFromFileName(GetResourcePath(resource).c_str())) {
  41. return data;
  42. }
  43. SkDebugf("Resource \"%s\" not found.\n", GetResourcePath(resource).c_str());
  44. #ifdef SK_TOOLS_REQUIRE_RESOURCES
  45. SK_ABORT("missing resource");
  46. #endif
  47. return nullptr;
  48. }
  49. sk_sp<SkTypeface> MakeResourceAsTypeface(const char* resource, int ttcIndex) {
  50. return SkTypeface::MakeFromStream(GetResourceAsStream(resource), ttcIndex);
  51. }