From 99a034f91471b410d2437b6651be7ef10091549b Mon Sep 17 00:00:00 2001
From: Zolnai Tamás <tamas.zolnai@collabora.com>
Date: Sun, 27 Apr 2014 20:25:52 +0200
Subject: OpenGLHelper: extract BGRA buffer -> BitmepEx conversion

Change-Id: I71edb2768d24f0c6686a9c94333447a5acc498b4
---
 vcl/source/opengl/OpenGLHelper.cxx | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

(limited to 'vcl/source/opengl/OpenGLHelper.cxx')

diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx
index 35760f2de72c..82b4a9affc03 100644
--- a/vcl/source/opengl/OpenGLHelper.cxx
+++ b/vcl/source/opengl/OpenGLHelper.cxx
@@ -168,4 +168,33 @@ sal_uInt8* OpenGLHelper::ConvertBitmapExToRGBABuffer(const BitmapEx& rBitmapEx)
     return pBitmapBuf;
 }
 
+BitmapEx OpenGLHelper::ConvertBGRABufferToBitmapEx(const sal_uInt8* const pBuffer, long nWidth, long nHeight)
+{
+    assert(pBuffer);
+    Bitmap aBitmap( Size(nWidth, nHeight), 24 );
+    AlphaMask aAlpha( Size(nWidth, nHeight) );
+
+    {
+        Bitmap::ScopedWriteAccess pWriteAccess( aBitmap );
+        AlphaMask::ScopedWriteAccess pAlphaWriteAccess( aAlpha );
+
+        size_t nCurPos = 0;
+        for( int y = 0; y < nHeight; ++y)
+        {
+            Scanline pScan = pWriteAccess->GetScanline(y);
+            Scanline pAlphaScan = pAlphaWriteAccess->GetScanline(y);
+            for( int x = 0; x < nWidth; ++x )
+            {
+                *pScan++ = pBuffer[nCurPos];
+                *pScan++ = pBuffer[nCurPos+1];
+                *pScan++ = pBuffer[nCurPos+2];
+
+                nCurPos += 3;
+                *pAlphaScan++ = static_cast<sal_uInt8>( 255 - pBuffer[nCurPos++] );
+            }
+        }
+    }
+    return BitmapEx(aBitmap, aAlpha);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
-- 
cgit