diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-04-18 15:24:25 +0200 |
---|---|---|
committer | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-04-18 18:53:22 +0200 |
commit | 8afabd394214bb7c772c88b08ec3cadb56771cce (patch) | |
tree | 9b29eed5f78bec3986372040654bc66d04072f47 /vcl | |
parent | 9cf12d7544d501e6794cfbb6eabf508603d59966 (diff) |
Extract code of BitmapEx -> RGBA buffer conversion to OpenGLHelper
Needed by gltf rendering.
Change-Id: I1aa974f3c515c5fb19a07b54ff655331138553cb
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/opengl/OpenGLHelper.cxx | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx index 0042231779d8..35760f2de72c 100644 --- a/vcl/source/opengl/OpenGLHelper.cxx +++ b/vcl/source/opengl/OpenGLHelper.cxx @@ -12,6 +12,8 @@ #include <osl/file.hxx> #include <rtl/bootstrap.hxx> #include <config_folders.h> +#include <vcl/salbtype.hxx> +#include <vcl/bmpacc.hxx> #include <vector> @@ -140,4 +142,30 @@ GLint OpenGLHelper::LoadShaders(const OUString& rVertexShaderName,const OUString return ProgramID; } +sal_uInt8* OpenGLHelper::ConvertBitmapExToRGBABuffer(const BitmapEx& rBitmapEx) +{ + long nBmpWidth = rBitmapEx.GetSizePixel().Width(); + long nBmpHeight = rBitmapEx.GetSizePixel().Height(); + + Bitmap aBitmap (rBitmapEx.GetBitmap()); + AlphaMask aAlpha (rBitmapEx.GetAlpha()); + sal_uInt8* pBitmapBuf(new sal_uInt8[4* nBmpWidth * nBmpHeight ]); + Bitmap::ScopedReadAccess pReadAccces( aBitmap ); + AlphaMask::ScopedReadAccess pAlphaReadAccess( aAlpha ); + size_t i = 0; + for (long ny = 0; ny < nBmpHeight; ny++) + { + Scanline pAScan = pAlphaReadAccess ? pAlphaReadAccess->GetScanline(ny) : 0; + for(long nx = 0; nx < nBmpWidth; nx++) + { + BitmapColor aCol = pReadAccces->GetColor( ny, nx ); + pBitmapBuf[i++] = aCol.GetRed(); + pBitmapBuf[i++] = aCol.GetGreen(); + pBitmapBuf[i++] = aCol.GetBlue(); + pBitmapBuf[i++] = pAScan ? 255 - *pAScan++ : 255; + } + } + return pBitmapBuf; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |