21 #include <osl/diagnose.h>
33 const Size aSizePix(aBitmap.GetSizePixel());
38 if ((nNewWidth > 1) && (nNewHeight > 1))
52 const double fRevScaleX =
static_cast<double>(nWidth1) / nNewWidth1;
54 std::unique_ptr<tools::Long[]> pLutInt(
new tools::Long[nNewWidth]);
55 std::unique_ptr<tools::Long[]> pLutFrac(
new tools::Long[nNewWidth]);
57 for (
tools::Long nX = 0, nTemp = nWidth - 2; nX < nNewWidth; nX++)
59 double fTemp = nX * fRevScaleX;
60 pLutInt[nX] =
MinMax(static_cast<tools::Long>(fTemp), 0, nTemp);
62 pLutFrac[nX] =
static_cast<tools::Long>(fTemp * 1024.);
108 nTemp = pLutFrac[nX];
118 static_cast<sal_uInt8>((lXR1 * nTemp + (lXR0 << 10)) >> 10));
120 static_cast<sal_uInt8>((lXG1 * nTemp + (lXG0 << 10)) >> 10));
122 static_cast<sal_uInt8>((lXB1 * nTemp + (lXB0 << 10)) >> 10));
138 const Bitmap aOriginal(aBitmap);
140 aNewBmp =
Bitmap(
Size(nNewWidth, nNewHeight), 24);
144 if (pReadAcc && pWriteAcc)
148 const double fRevScaleY =
static_cast<double>(nHeight1) / nNewHeight1;
150 std::unique_ptr<tools::Long[]> pLutInt(
new tools::Long[nNewHeight]);
151 std::unique_ptr<tools::Long[]> pLutFrac(
new tools::Long[nNewHeight]);
153 for (
tools::Long nY = 0, nTemp = nHeight - 2; nY < nNewHeight; nY++)
155 double fTemp = nY * fRevScaleY;
156 pLutInt[nY] =
MinMax(static_cast<tools::Long>(fTemp), 0, nTemp);
157 fTemp -= pLutInt[nY];
158 pLutFrac[nY] =
static_cast<tools::Long>(fTemp * 1024.);
162 OSL_ENSURE(!pReadAcc->
HasPalette(),
"OOps, somehow ImplScaleInterpolate "
163 "in-between format has palette, should not "
186 nTemp = pLutFrac[nY];
196 static_cast<sal_uInt8>((lXR1 * nTemp + (lXR0 << 10)) >> 10));
198 static_cast<sal_uInt8>((lXG1 * nTemp + (lXG0 << 10)) >> 10));
200 static_cast<sal_uInt8>((lXB1 * nTemp + (lXB0 << 10)) >> 10));
sal_uInt8 GetIndexFromData(const sal_uInt8 *pData, tools::Long nX) const
tools::Long Height() const
void SetBlue(sal_uInt8 nBlue)
std::enable_if< std::is_signed< T >::value||std::is_floating_point< T >::value, long >::type MinMax(T nVal, tools::Long nMin, tools::Long nMax)
vcl::ScopedBitmapAccess< BitmapWriteAccess, Bitmap,&Bitmap::AcquireWriteAccess > BitmapScopedWriteAccess
void SetPixelOnData(sal_uInt8 *pData, tools::Long nX, const BitmapColor &rBitmapColor)
Scanline GetScanline(tools::Long nY) const
static bool Filter(BitmapEx &rBmpEx, BitmapFilter const &rFilter)
void SetPixel(tools::Long nY, tools::Long nX, const BitmapColor &rBitmapColor)
sal_uInt8 GetBlue() const
virtual BitmapEx execute(BitmapEx const &rBitmapEx) const override
vcl::ScopedBitmapAccess< BitmapReadAccess, Bitmap,&Bitmap::AcquireReadAccess > ScopedReadAccess
tools::Long FRound(double fVal)
tools::Long Width() const
void SetRed(sal_uInt8 nRed)
Bitmap GetBitmap(Color aTransparentReplaceColor) const
sal_uInt8 GetGreen() const
void SetGreen(sal_uInt8 nGreen)
BitmapColor GetPixelFromData(const sal_uInt8 *pData, tools::Long nX) const
void AdaptBitCount(Bitmap &rNew) const
const BitmapColor & GetPaletteColor(sal_uInt16 nColor) const
BitmapColor GetPixel(tools::Long nY, tools::Long nX) const