mirror of
https://github.com/aseprite/aseprite.git
synced 2024-12-26 00:19:13 +00:00
Add missing skia_surface.cpp file
This commit is contained in:
parent
fa28fcfb52
commit
80be429c89
61
src/she/skia/skia_surface.cpp
Normal file
61
src/she/skia/skia_surface.cpp
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// SHE library
|
||||||
|
// Copyright (C) 2016 David Capello
|
||||||
|
//
|
||||||
|
// This file is released under the terms of the MIT license.
|
||||||
|
// Read LICENSE.txt for more information.
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "she/skia/skia_surface.h"
|
||||||
|
|
||||||
|
#include "base/file_handle.h"
|
||||||
|
|
||||||
|
#include "SkCodec.h"
|
||||||
|
#include "SkPixelRef.h"
|
||||||
|
#include "SkStream.h"
|
||||||
|
|
||||||
|
namespace she {
|
||||||
|
|
||||||
|
sk_sp<SkColorSpace> SkiaSurface::m_colorSpace;
|
||||||
|
|
||||||
|
// static
|
||||||
|
Surface* SkiaSurface::loadSurface(const char* filename)
|
||||||
|
{
|
||||||
|
base::FileHandle fp(base::open_file_with_exception(filename, "rb"));
|
||||||
|
|
||||||
|
SkAutoTDelete<SkCodec> codec(
|
||||||
|
SkCodec::NewFromStream(
|
||||||
|
new SkFILEStream(fp.get(), SkFILEStream::kCallerRetains_Ownership)));
|
||||||
|
if (!codec)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
SkImageInfo info = codec->getInfo()
|
||||||
|
.makeColorType(kN32_SkColorType)
|
||||||
|
.makeAlphaType(kPremul_SkAlphaType)
|
||||||
|
.makeColorSpace(colorSpace());
|
||||||
|
SkBitmap bm;
|
||||||
|
if (!bm.tryAllocPixels(info))
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
const SkCodec::Result r = codec->getPixels(info, bm.getPixels(), bm.rowBytes());
|
||||||
|
if (r != SkCodec::kSuccess)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
SkiaSurface* sur = new SkiaSurface();
|
||||||
|
sur->swapBitmap(bm);
|
||||||
|
return sur;
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
sk_sp<SkColorSpace> SkiaSurface::colorSpace()
|
||||||
|
{
|
||||||
|
#if 0 // TODO Add support to different color spaces
|
||||||
|
if (!m_colorSpace)
|
||||||
|
m_colorSpace = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named);
|
||||||
|
#endif
|
||||||
|
return m_colorSpace;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace she
|
Loading…
Reference in New Issue
Block a user