本文整理汇总了C++中NativeImageSkia::getPixels方法的典型用法代码示例。如果您正苦于以下问题:C++ NativeImageSkia::getPixels方法的具体用法?C++ NativeImageSkia::getPixels怎么用?C++ NativeImageSkia::getPixels使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NativeImageSkia
的用法示例。
在下文中一共展示了NativeImageSkia::getPixels方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: decoder
bool GraphicsContext3D::getImageData(Image* image,
GC3Denum format,
GC3Denum type,
bool premultiplyAlpha,
bool ignoreGammaAndColorProfile,
Vector<uint8_t>& outputVector)
{
if (!image)
return false;
OwnPtr<NativeImageSkia> pixels;
NativeImageSkia* skiaImage = 0;
AlphaOp neededAlphaOp = AlphaDoNothing;
bool hasAlpha = image->isBitmapImage() ? static_cast<BitmapImage*>(image)->frameHasAlphaAtIndex(0) : true;
if ((ignoreGammaAndColorProfile || (hasAlpha && !premultiplyAlpha)) && image->data()) {
ImageSource decoder(ImageSource::AlphaNotPremultiplied,
ignoreGammaAndColorProfile ? ImageSource::GammaAndColorProfileIgnored : ImageSource::GammaAndColorProfileApplied);
// Attempt to get raw unpremultiplied image data
decoder.setData(image->data(), true);
if (!decoder.frameCount() || !decoder.frameIsCompleteAtIndex(0))
return false;
hasAlpha = decoder.frameHasAlphaAtIndex(0);
pixels = adoptPtr(decoder.createFrameAtIndex(0));
if (!pixels.get() || !pixels->isDataComplete() || !pixels->width() || !pixels->height())
return false;
SkBitmap::Config skiaConfig = pixels->config();
if (skiaConfig != SkBitmap::kARGB_8888_Config)
return false;
skiaImage = pixels.get();
if (hasAlpha && premultiplyAlpha)
neededAlphaOp = AlphaDoPremultiply;
} else {
skiaImage = image->nativeImageForCurrentFrame();
if (!premultiplyAlpha && hasAlpha)
neededAlphaOp = AlphaDoUnmultiply;
}
if (!skiaImage)
return false;
SkBitmap& skiaImageRef = *skiaImage;
SkAutoLockPixels lock(skiaImageRef);
ASSERT(skiaImage->rowBytes() == skiaImage->width() * 4);
outputVector.resize(skiaImage->rowBytes() * skiaImage->height());
return packPixels(reinterpret_cast<const uint8_t*>(skiaImage->getPixels()),
SourceFormatBGRA8, skiaImage->width(), skiaImage->height(), 0,
format, type, neededAlphaOp, outputVector.data());
}
示例2: lock
bool GraphicsContext3D::getImageData(Image* image,
Vector<uint8_t>& outputVector,
bool premultiplyAlpha,
bool* hasAlphaChannel,
AlphaOp* neededAlphaOp,
unsigned int* format)
{
if (!image)
return false;
NativeImageSkia* skiaImage = image->nativeImageForCurrentFrame();
if (!skiaImage)
return false;
SkBitmap::Config skiaConfig = skiaImage->config();
// FIXME: must support more image configurations.
if (skiaConfig != SkBitmap::kARGB_8888_Config)
return false;
SkBitmap& skiaImageRef = *skiaImage;
SkAutoLockPixels lock(skiaImageRef);
int height = skiaImage->height();
int rowBytes = skiaImage->rowBytes();
ASSERT(rowBytes == skiaImage->width() * 4);
uint8_t* pixels = reinterpret_cast<uint8_t*>(skiaImage->getPixels());
outputVector.resize(rowBytes * height);
int size = rowBytes * height;
memcpy(outputVector.data(), pixels, size);
*hasAlphaChannel = true;
if (!premultiplyAlpha)
// FIXME: must fetch the image data before the premultiplication step
*neededAlphaOp = kAlphaDoUnmultiply;
// Convert from BGRA to RGBA. FIXME: add GL_BGRA extension support
// to all underlying OpenGL implementations.
for (int i = 0; i < size; i += 4)
std::swap(outputVector[i], outputVector[i + 2]);
*format = RGBA;
return true;
}
示例3: dispatchDidReceiveIcon
void FrameLoaderClientBlackBerry::dispatchDidReceiveIcon()
{
String url = m_frame->document()->url().string();
Image* img = iconDatabase().synchronousIconForPageURL(url, IntSize(10, 10));
if (!img || !img->data())
return;
NativeImageSkia* bitmap = img->nativeImageForCurrentFrame();
if (!bitmap)
return;
bitmap->lockPixels();
String iconUrl = iconDatabase().synchronousIconURLForPageURL(url);
m_webPagePrivate->m_client->setFavicon(img->width(), img->height(), (unsigned char*)bitmap->getPixels(), iconUrl.utf8().data());
bitmap->unlockPixels();
}