From 8afabd394214bb7c772c88b08ec3cadb56771cce Mon Sep 17 00:00:00 2001 From: Zolnai Tamás Date: Fri, 18 Apr 2014 15:24:25 +0200 Subject: Extract code of BitmapEx -> RGBA buffer conversion to OpenGLHelper Needed by gltf rendering. Change-Id: I1aa974f3c515c5fb19a07b54ff655331138553cb --- vcl/source/opengl/OpenGLHelper.cxx | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'vcl') 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 #include #include +#include +#include #include @@ -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: */ -- cgit