bool 
SourceSurfaceSkia::InitFromData(unsigned char* aData,
                                const IntSize &aSize,
                                int32_t aStride,
                                SurfaceFormat aFormat)
{
  SkBitmap temp;
  temp.setConfig(GfxFormatToSkiaConfig(aFormat), aSize.width, aSize.height, aStride);
  temp.setPixels(aData);

  if (!temp.copyTo(&mBitmap, GfxFormatToSkiaConfig(aFormat))) {
    return false;
  }

  if (aFormat == FORMAT_B8G8R8X8) {
    mBitmap.lockPixels();
    // We have to manually set the A channel to be 255 as Skia doesn't understand BGRX
    ConvertBGRXToBGRA(reinterpret_cast<unsigned char*>(mBitmap.getPixels()), aSize, aStride);
    mBitmap.unlockPixels();
    mBitmap.notifyPixelsChanged();
    mBitmap.setIsOpaque(true);
  }

  mSize = aSize;
  mFormat = aFormat;
  mStride = aStride;
  return true;
}
Example #2
0
bool Scale(uint8_t* srcData, int32_t srcWidth, int32_t srcHeight, int32_t srcStride,
           uint8_t* dstData, int32_t dstWidth, int32_t dstHeight, int32_t dstStride,
           SurfaceFormat format)
{
#ifdef USE_SKIA
  SkAlphaType alphaType;
  if (format == SurfaceFormat::B8G8R8A8) {
    alphaType = kPremul_SkAlphaType;
  } else {
    alphaType = kOpaque_SkAlphaType;
  }

  SkBitmap::Config config = GfxFormatToSkiaConfig(format);

  SkBitmap imgSrc;
  imgSrc.setConfig(config, srcWidth, srcHeight, srcStride, alphaType);
  imgSrc.setPixels(srcData);

  // Rescaler is compatible with 32 bpp only. Convert to RGB32 if needed.
  if (config != SkBitmap::kARGB_8888_Config) {
    imgSrc.copyTo(&imgSrc, SkBitmap::kARGB_8888_Config);
  }

  // This returns an SkBitmap backed by dstData; since it also wrote to dstData,
  // we don't need to look at that SkBitmap.
  SkBitmap result = skia::ImageOperations::Resize(imgSrc,
                                                  skia::ImageOperations::RESIZE_BEST,
                                                  dstWidth, dstHeight,
                                                  dstData);

  return !result.isNull();
#else
  return false;
#endif
}
Example #3
0
bool
DrawTargetSkia::Init(const IntSize &aSize, SurfaceFormat aFormat)
{
    mBitmap.setConfig(GfxFormatToSkiaConfig(aFormat), aSize.width, aSize.height);
    if (!mBitmap.allocPixels()) {
        return false;
    }
    mBitmap.eraseARGB(0, 0, 0, 0);
    SkAutoTUnref<SkDevice> device(new SkDevice(mBitmap));
    SkAutoTUnref<SkCanvas> canvas(new SkCanvas(device.get()));
    mSize = aSize;

    mDevice = device.get();
    mCanvas = canvas.get();
    mFormat = aFormat;
    return true;
}
Example #4
0
void
DrawTargetSkia::Init(unsigned char* aData, const IntSize &aSize, int32_t aStride, SurfaceFormat aFormat)
{
  SkAlphaType alphaType = kPremul_SkAlphaType;
  if (aFormat == SurfaceFormat::B8G8R8X8) {
    // We have to manually set the A channel to be 255 as Skia doesn't understand BGRX
    ConvertBGRXToBGRA(aData, aSize, aStride);
    alphaType = kOpaque_SkAlphaType;
  }

  SkBitmap bitmap;
  bitmap.setConfig(GfxFormatToSkiaConfig(aFormat), aSize.width, aSize.height, aStride, alphaType);
  bitmap.setPixels(aData);
  SkAutoTUnref<SkCanvas> canvas(new SkCanvas(new SkBitmapDevice(bitmap)));

  mSize = aSize;
  mCanvas = canvas.get();
  mFormat = aFormat;
}
Example #5
0
void
DrawTargetSkia::Init(unsigned char* aData, const IntSize &aSize, int32_t aStride, SurfaceFormat aFormat)
{
    if (aFormat == FORMAT_B8G8R8X8) {
        // We have to manually set the A channel to be 255 as Skia doesn't understand BGRX
        ConvertBGRXToBGRA(aData, aSize, aStride);
        mBitmap.setIsOpaque(true);
    }

    mBitmap.setConfig(GfxFormatToSkiaConfig(aFormat), aSize.width, aSize.height, aStride);
    mBitmap.setPixels(aData);

    SkAutoTUnref<SkDevice> device(new SkDevice(mBitmap));
    SkAutoTUnref<SkCanvas> canvas(new SkCanvas(device.get()));
    mSize = aSize;

    mDevice = device.get();
    mCanvas = canvas.get();
    mFormat = aFormat;
}
Example #6
0
bool
DrawTargetSkia::Init(const IntSize &aSize, SurfaceFormat aFormat)
{
  SkAutoTUnref<SkBaseDevice> device(new SkBitmapDevice(GfxFormatToSkiaConfig(aFormat),
                                                       aSize.width, aSize.height,
                                                       aFormat == SurfaceFormat::B8G8R8X8));

  SkBitmap bitmap = device->accessBitmap(true);
  if (!bitmap.allocPixels()) {
    return false;
  }

  bitmap.eraseARGB(0, 0, 0, 0);

  SkAutoTUnref<SkCanvas> canvas(new SkCanvas(device.get()));
  mSize = aSize;

  mCanvas = canvas.get();
  mFormat = aFormat;
  return true;
}