From 4d2a7692ef7d5cf733cb818b67be300968aa5689 Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Mon, 3 Jun 2013 23:39:30 +0200 Subject: fdo#34423 Allow to rotate raw uncompressed bitmaps. When using a graphic filter like blur or sharpen, a raw uncompressed bitmap is created. Until now it was not possible to rotate such bitmap but now this is allowed. Change-Id: I716fa46e37680b1111131586fad20da28391de14 --- include/vcl/GraphicNativeTransform.hxx | 5 +++-- vcl/source/filter/GraphicNativeTransform.cxx | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/include/vcl/GraphicNativeTransform.hxx b/include/vcl/GraphicNativeTransform.hxx index db727a22c5ff..4739e97cce26 100644 --- a/include/vcl/GraphicNativeTransform.hxx +++ b/include/vcl/GraphicNativeTransform.hxx @@ -26,8 +26,9 @@ class VCL_DLLPUBLIC GraphicNativeTransform { Graphic& mrGraphic; - bool rotateJPEG (sal_uInt16 aRotation); - bool rotateGeneric (sal_uInt16 aRotation, OUString aType); + bool rotateBitmapOnly (sal_uInt16 aRotation); + bool rotateJPEG (sal_uInt16 aRotation); + bool rotateGeneric (sal_uInt16 aRotation, OUString aType); public: GraphicNativeTransform(Graphic& rGraphic); diff --git a/vcl/source/filter/GraphicNativeTransform.cxx b/vcl/source/filter/GraphicNativeTransform.cxx index 7b3f64072afa..261ad90c3ce5 100644 --- a/vcl/source/filter/GraphicNativeTransform.cxx +++ b/vcl/source/filter/GraphicNativeTransform.cxx @@ -47,7 +47,8 @@ bool GraphicNativeTransform::canBeRotated() if ( aLink.GetType() == GFX_LINK_TYPE_NATIVE_JPG || aLink.GetType() == GFX_LINK_TYPE_NATIVE_PNG - || aLink.GetType() == GFX_LINK_TYPE_NATIVE_GIF) + || aLink.GetType() == GFX_LINK_TYPE_NATIVE_GIF + || aLink.GetType() == GFX_LINK_TYPE_NONE) { return true; } @@ -82,9 +83,27 @@ bool GraphicNativeTransform::rotate(sal_uInt16 aInputRotation) { return rotateGeneric(aRotation, OUString("gif")); } + else if ( aLink.GetType() == GFX_LINK_TYPE_NONE ) + { + return rotateBitmapOnly(aRotation); + } return false; } +bool GraphicNativeTransform::rotateBitmapOnly(sal_uInt16 aRotation) +{ + if (mrGraphic.IsAnimated()) + { + return false; + } + + BitmapEx aBitmap = mrGraphic.GetBitmapEx(); + aBitmap.Rotate(aRotation, COL_BLACK); + mrGraphic = aBitmap; + + return true; +} + bool GraphicNativeTransform::rotateGeneric(sal_uInt16 aRotation, OUString aType) { // Can't rotate animations yet -- cgit