Coverage Report

Created: 2025-11-16 09:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/vcl/source/bitmap/bmpfast.cxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
20
#include <vcl/salgtype.hxx>
21
22
#include <vcl/BitmapWriteAccess.hxx>
23
#include <bitmap/bmpfast.hxx>
24
25
#include <sal/log.hxx>
26
27
#include <utility>
28
29
typedef unsigned char PIXBYTE;
30
31
namespace {
32
33
class BasePixelPtr
34
{
35
public:
36
0
    explicit BasePixelPtr( PIXBYTE* p = nullptr ) : mpPixel( p ) {}
37
0
    void    SetRawPtr( PIXBYTE* pRawPtr )               { mpPixel = pRawPtr; }
38
0
    void    AddByteOffset( int nByteOffset )            { mpPixel += nByteOffset; }
39
40
protected:
41
   PIXBYTE* mpPixel;
42
};
43
44
template <ScanlineFormat PIXFMT>
45
class TrueColorPixelPtr : public BasePixelPtr
46
{
47
public:
48
    PIXBYTE GetRed() const;
49
    PIXBYTE GetGreen() const;
50
    PIXBYTE GetBlue() const;
51
    PIXBYTE GetAlpha() const;
52
53
    void    SetColor( PIXBYTE r, PIXBYTE g, PIXBYTE b ) const;
54
    void    SetAlpha( PIXBYTE a ) const;
55
};
56
57
// template specializations for truecolor pixel formats
58
template <>
59
class TrueColorPixelPtr<ScanlineFormat::N24BitTcRgb> : public BasePixelPtr
60
{
61
public:
62
0
    void    operator++()       { mpPixel += 3; }
63
64
0
    PIXBYTE GetRed() const     { return mpPixel[0]; }
65
0
    PIXBYTE GetGreen() const   { return mpPixel[1]; }
66
0
    PIXBYTE GetBlue() const    { return mpPixel[2]; }
67
0
    static PIXBYTE GetAlpha()  { return 255; }
68
0
    static void SetAlpha( PIXBYTE ) {}
69
70
    void SetColor( PIXBYTE r, PIXBYTE g, PIXBYTE b ) const
71
0
    {
72
0
        mpPixel[0] = r;
73
0
        mpPixel[1] = g;
74
0
        mpPixel[2] = b;
75
0
    }
76
};
77
78
template <>
79
class TrueColorPixelPtr<ScanlineFormat::N24BitTcBgr> : public BasePixelPtr
80
{
81
public:
82
0
    void    operator++()        { mpPixel += 3; }
83
84
0
    PIXBYTE GetRed() const      { return mpPixel[2]; }
85
0
    PIXBYTE GetGreen() const    { return mpPixel[1]; }
86
0
    PIXBYTE GetBlue() const     { return mpPixel[0]; }
87
0
    static PIXBYTE GetAlpha()   { return 255; }
88
0
    static void SetAlpha( PIXBYTE ) {}
89
90
    void SetColor( PIXBYTE r, PIXBYTE g, PIXBYTE b ) const
91
0
    {
92
0
        mpPixel[0] = b;
93
0
        mpPixel[1] = g;
94
0
        mpPixel[2] = r;
95
0
    }
96
};
97
98
template <>
99
class TrueColorPixelPtr<ScanlineFormat::N32BitTcArgb> : public BasePixelPtr
100
{
101
public:
102
0
    void    operator++()        { mpPixel += 4; }
103
104
0
    PIXBYTE GetRed() const      { return mpPixel[1]; }
105
0
    PIXBYTE GetGreen() const    { return mpPixel[2]; }
106
0
    PIXBYTE GetBlue() const     { return mpPixel[3]; }
107
0
    PIXBYTE GetAlpha() const    { return mpPixel[0]; }
108
0
    void SetAlpha( PIXBYTE a ) const { mpPixel[0] = a; }
109
110
    void SetColor( PIXBYTE r, PIXBYTE g, PIXBYTE b ) const
111
0
    {
112
0
        mpPixel[1] = r;
113
0
        mpPixel[2] = g;
114
0
        mpPixel[3] = b;
115
0
    }
116
};
117
118
template <>
119
class TrueColorPixelPtr<ScanlineFormat::N32BitTcAbgr> : public BasePixelPtr
120
{
121
public:
122
0
    void    operator++()        { mpPixel += 4; }
123
124
0
    PIXBYTE GetRed() const      { return mpPixel[3]; }
125
0
    PIXBYTE GetGreen() const    { return mpPixel[2]; }
126
0
    PIXBYTE GetBlue() const     { return mpPixel[1]; }
127
0
    PIXBYTE GetAlpha() const    { return mpPixel[0]; }
128
0
    void SetAlpha( PIXBYTE a ) const { mpPixel[0] = a; }
129
130
    void SetColor( PIXBYTE r, PIXBYTE g, PIXBYTE b ) const
131
0
    {
132
0
        mpPixel[1] = b;
133
0
        mpPixel[2] = g;
134
0
        mpPixel[3] = r;
135
0
    }
136
};
137
138
template <>
139
class TrueColorPixelPtr<ScanlineFormat::N32BitTcRgba> : public BasePixelPtr
140
{
141
public:
142
0
    void    operator++()            { mpPixel += 4; }
143
144
0
    PIXBYTE GetRed() const          { return mpPixel[0]; }
145
0
    PIXBYTE GetGreen() const        { return mpPixel[1]; }
146
0
    PIXBYTE GetBlue() const         { return mpPixel[2]; }
147
0
    PIXBYTE GetAlpha() const        { return mpPixel[3]; }
148
0
    void SetAlpha( PIXBYTE a ) const{ mpPixel[3] = a; }
149
150
    void SetColor( PIXBYTE r, PIXBYTE g, PIXBYTE b ) const
151
0
    {
152
0
        mpPixel[0] = r;
153
0
        mpPixel[1] = g;
154
0
        mpPixel[2] = b;
155
0
    }
156
};
157
158
template <>
159
class TrueColorPixelPtr<ScanlineFormat::N32BitTcBgra> : public BasePixelPtr
160
{
161
public:
162
0
    void    operator++()            { mpPixel += 4; }
163
164
0
    PIXBYTE GetRed() const          { return mpPixel[2]; }
165
0
    PIXBYTE GetGreen() const        { return mpPixel[1]; }
166
0
    PIXBYTE GetBlue() const         { return mpPixel[0]; }
167
0
    PIXBYTE GetAlpha() const        { return mpPixel[3]; }
168
0
    void SetAlpha( PIXBYTE a ) const{ mpPixel[3] = a; }
169
170
    void SetColor( PIXBYTE r, PIXBYTE g, PIXBYTE b ) const
171
0
    {
172
0
        mpPixel[0] = b;
173
0
        mpPixel[1] = g;
174
0
        mpPixel[2] = r;
175
0
    }
176
};
177
178
// This assumes the content uses the grayscale palette (needs to be checked
179
// by code allowing the use of the format).
180
// Only reading color is implemented, since e.g. 24bpp input couldn't be
181
// easily guaranteed to be grayscale.
182
template <>
183
class TrueColorPixelPtr<ScanlineFormat::N8BitPal> : public BasePixelPtr
184
{
185
public:
186
0
    void    operator++()                    { mpPixel += 1; }
187
188
0
    PIXBYTE GetRed() const      { return mpPixel[0]; }
189
0
    PIXBYTE GetGreen() const    { return mpPixel[0]; }
190
0
    PIXBYTE GetBlue() const     { return mpPixel[0]; }
191
0
    static PIXBYTE GetAlpha()   { return 255; }
192
};
193
194
}
195
196
// converting truecolor formats
197
template <ScanlineFormat SRCFMT, ScanlineFormat DSTFMT>
198
static void ImplConvertPixel( const TrueColorPixelPtr<DSTFMT>& rDst,
199
    const TrueColorPixelPtr<SRCFMT>& rSrc )
200
0
{
201
0
    rDst.SetColor( rSrc.GetRed(), rSrc.GetGreen(), rSrc.GetBlue() );
202
0
    rDst.SetAlpha( rSrc.GetAlpha() );
203
0
}
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)1, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)1, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)1, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)1, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)1, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)1, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)2, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)2, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)2, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)2, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)2, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)3, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)3, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)3, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)3, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)3, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)4, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)4, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)4, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)4, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)4, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)6, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)6, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)6, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)6, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)6, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)8, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)8, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)8, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)8, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)8, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)10, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)10, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)10, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)10, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)10, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)2, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)3, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)4, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)6, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)8, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertPixel<(ScanlineFormat)10, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&)
204
205
template <ScanlineFormat SRCFMT, ScanlineFormat DSTFMT>
206
static void ImplConvertLine( const TrueColorPixelPtr<DSTFMT>& rDst,
207
    const TrueColorPixelPtr<SRCFMT>& rSrc, int nPixelCount )
208
0
{
209
0
    TrueColorPixelPtr<DSTFMT> aDst( rDst );
210
0
    TrueColorPixelPtr<SRCFMT> aSrc( rSrc );
211
0
    while( --nPixelCount >= 0 )
212
0
    {
213
0
        ImplConvertPixel( aDst, aSrc );
214
0
        ++aSrc;
215
0
        ++aDst;
216
0
    }
217
0
}
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)1, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)1, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)1, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)1, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)1, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)1, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)2, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)2, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)2, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)2, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)2, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)3, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)3, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)3, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)3, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)3, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)4, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)4, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)4, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)4, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)4, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)6, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)6, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)6, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)6, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)6, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)8, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)8, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)8, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)8, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)8, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)10, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)10, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)10, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)10, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)10, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)2, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)3, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)4, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)6, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)8, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8> const&, int)
Unexecuted instantiation: bmpfast.cxx:void ImplConvertLine<(ScanlineFormat)10, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10> const&, int)
218
219
static bool ImplCopyImage( BitmapBuffer& rDstBuffer, const BitmapBuffer& rSrcBuffer )
220
0
{
221
0
    const int nSrcLinestep = rSrcBuffer.mnScanlineSize;
222
0
    int nDstLinestep = rDstBuffer.mnScanlineSize;
223
224
0
    const PIXBYTE* pRawSrc = rSrcBuffer.mpBits;
225
0
    PIXBYTE* pRawDst = rDstBuffer.mpBits;
226
227
    // source and destination don't match upside down
228
0
    if (rSrcBuffer.meDirection != rDstBuffer.meDirection)
229
0
    {
230
0
        pRawDst += (rSrcBuffer.mnHeight - 1) * nDstLinestep;
231
0
        nDstLinestep = -rDstBuffer.mnScanlineSize;
232
0
    }
233
0
    else if( nSrcLinestep == nDstLinestep )
234
0
    {
235
0
        memcpy( pRawDst, pRawSrc, rSrcBuffer.mnHeight * nDstLinestep );
236
0
        return true;
237
0
    }
238
239
0
    int nByteWidth = nSrcLinestep;
240
0
    if( nByteWidth > rDstBuffer.mnScanlineSize )
241
0
        nByteWidth = rDstBuffer.mnScanlineSize;
242
243
0
    for( int y = rSrcBuffer.mnHeight; --y >= 0; )
244
0
    {
245
0
        memcpy( pRawDst, pRawSrc, nByteWidth );
246
0
        pRawSrc += nSrcLinestep;
247
0
        pRawDst += nDstLinestep;
248
0
    }
249
250
0
    return true;
251
0
}
252
253
template <ScanlineFormat DSTFMT,ScanlineFormat SRCFMT>
254
static bool ImplConvertToBitmap( TrueColorPixelPtr<SRCFMT>& rSrcLine,
255
    BitmapBuffer& rDstBuffer, const BitmapBuffer& rSrcBuffer )
256
0
{
257
    // help the compiler to avoid instantiations of unneeded conversions
258
0
    SAL_WARN_IF( SRCFMT == DSTFMT, "vcl.gdi", "ImplConvertToBitmap into same format");
259
0
    if( SRCFMT == DSTFMT )
260
0
        return false;
261
262
0
    const int nSrcLinestep = rSrcBuffer.mnScanlineSize;
263
0
    int nDstLinestep = rDstBuffer.mnScanlineSize;
264
265
0
    TrueColorPixelPtr<DSTFMT> aDstLine; aDstLine.SetRawPtr( rDstBuffer.mpBits );
266
267
    // source and destination don't match upside down
268
0
    if (rSrcBuffer.meDirection != rDstBuffer.meDirection)
269
0
    {
270
0
        aDstLine.AddByteOffset( (rSrcBuffer.mnHeight - 1) * nDstLinestep );
271
0
        nDstLinestep = -nDstLinestep;
272
0
    }
273
274
0
    for( int y = rSrcBuffer.mnHeight; --y >= 0; )
275
0
    {
276
0
        ImplConvertLine( aDstLine, rSrcLine, rSrcBuffer.mnWidth );
277
0
        rSrcLine.AddByteOffset( nSrcLinestep );
278
0
        aDstLine.AddByteOffset( nDstLinestep );
279
0
    }
280
281
0
    return true;
282
0
}
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)2, (ScanlineFormat)1>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)3, (ScanlineFormat)1>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)4, (ScanlineFormat)1>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)6, (ScanlineFormat)1>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)8, (ScanlineFormat)1>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)10, (ScanlineFormat)1>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)1>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)2, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)3, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)4, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)6, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)8, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)10, (ScanlineFormat)2>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)2, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)3, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)4, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)6, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)8, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)10, (ScanlineFormat)3>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)2, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)3, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)4, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)6, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)8, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)10, (ScanlineFormat)4>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)2, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)3, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)4, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)6, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)8, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)10, (ScanlineFormat)6>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)2, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)3, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)4, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)6, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)8, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)10, (ScanlineFormat)8>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)2, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)3, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)4, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)6, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)8, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertToBitmap<(ScanlineFormat)10, (ScanlineFormat)10>((anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, BitmapBuffer&, BitmapBuffer const&)
283
284
template <ScanlineFormat SRCFMT>
285
static bool ImplConvertFromBitmap( BitmapBuffer& rDst, const BitmapBuffer& rSrc )
286
0
{
287
0
    TrueColorPixelPtr<SRCFMT> aSrcType; aSrcType.SetRawPtr( rSrc.mpBits );
288
289
    // select the matching instantiation for the destination's bitmap format
290
0
    switch (rDst.meFormat)
291
0
    {
292
0
        case ScanlineFormat::N8BitPal:
293
0
            break;
294
295
0
        case ScanlineFormat::N24BitTcBgr:
296
0
            return ImplConvertToBitmap<ScanlineFormat::N24BitTcBgr>( aSrcType, rDst, rSrc );
297
0
        case ScanlineFormat::N24BitTcRgb:
298
0
            return ImplConvertToBitmap<ScanlineFormat::N24BitTcRgb>( aSrcType, rDst, rSrc );
299
300
0
        case ScanlineFormat::N32BitTcAbgr:
301
0
        case ScanlineFormat::N32BitTcXbgr:
302
0
            return ImplConvertToBitmap<ScanlineFormat::N32BitTcAbgr>( aSrcType, rDst, rSrc );
303
0
        case ScanlineFormat::N32BitTcArgb:
304
0
        case ScanlineFormat::N32BitTcXrgb:
305
0
            return ImplConvertToBitmap<ScanlineFormat::N32BitTcArgb>( aSrcType, rDst, rSrc );
306
0
        case ScanlineFormat::N32BitTcBgra:
307
0
        case ScanlineFormat::N32BitTcBgrx:
308
0
            return ImplConvertToBitmap<ScanlineFormat::N32BitTcBgra>( aSrcType, rDst, rSrc );
309
0
        case ScanlineFormat::N32BitTcRgba:
310
0
        case ScanlineFormat::N32BitTcRgbx:
311
0
            return ImplConvertToBitmap<ScanlineFormat::N32BitTcRgba>( aSrcType, rDst, rSrc );
312
0
        default: break;
313
0
    }
314
315
0
    static int nNotAccelerated = 0;
316
0
    SAL_WARN_IF( rSrc.mnWidth * rSrc.mnHeight >= 4000 && ++nNotAccelerated == 100,
317
0
                 "vcl.gdi",
318
0
                 "ImplConvertFromBitmap for not accelerated case (" << std::hex << int(rSrc.meFormat) << "->" << int(rDst.meFormat) << ")" );
319
320
0
    return false;
321
0
}
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertFromBitmap<(ScanlineFormat)1>(BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertFromBitmap<(ScanlineFormat)2>(BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertFromBitmap<(ScanlineFormat)3>(BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertFromBitmap<(ScanlineFormat)4>(BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertFromBitmap<(ScanlineFormat)6>(BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertFromBitmap<(ScanlineFormat)8>(BitmapBuffer&, BitmapBuffer const&)
Unexecuted instantiation: bmpfast.cxx:bool ImplConvertFromBitmap<(ScanlineFormat)10>(BitmapBuffer&, BitmapBuffer const&)
322
323
// A universal stretching conversion is overkill in most common situations
324
// => performance benefits for speeding up the non-stretching cases
325
bool ImplFastBitmapConversion( BitmapBuffer& rDst, const BitmapBuffer& rSrc,
326
    const SalTwoRect& rTR )
327
9.49k
{
328
    // TODO:horizontal mirroring not implemented yet
329
9.49k
    if( rTR.mnDestWidth < 0 )
330
0
        return false;
331
    // vertical mirroring
332
9.49k
    if( rTR.mnDestHeight < 0 )
333
        // TODO: rDst.meDirection != ScanlineDirection::TopDown;
334
0
        return false;
335
336
    // offsetted conversion is not implemented yet
337
9.49k
    if( rTR.mnSrcX || rTR.mnSrcY )
338
0
        return false;
339
9.49k
    if( rTR.mnDestX || rTR.mnDestY )
340
0
        return false;
341
342
    // stretched conversion is not implemented yet
343
9.49k
    if( rTR.mnDestWidth != rTR.mnSrcWidth )
344
0
        return false;
345
9.49k
    if( rTR.mnDestHeight!= rTR.mnSrcHeight )
346
0
        return false;
347
348
    // check source image size
349
9.49k
    if( rSrc.mnWidth < rTR.mnSrcX + rTR.mnSrcWidth )
350
0
        return false;
351
9.49k
    if( rSrc.mnHeight < rTR.mnSrcY + rTR.mnSrcHeight )
352
0
        return false;
353
354
    // check dest image size
355
9.49k
    if( rDst.mnWidth < rTR.mnDestX + rTR.mnDestWidth )
356
0
        return false;
357
9.49k
    if( rDst.mnHeight < rTR.mnDestY + rTR.mnDestHeight )
358
0
        return false;
359
360
9.49k
    const ScanlineFormat nSrcFormat = rSrc.meFormat;
361
9.49k
    const ScanlineFormat nDstFormat = rDst.meFormat;
362
363
    // special handling of trivial cases
364
9.49k
    if( nSrcFormat == nDstFormat )
365
0
    {
366
        // accelerated palette conversions not yet implemented
367
0
        if( rSrc.maPalette != rDst.maPalette )
368
0
            return false;
369
0
        return ImplCopyImage( rDst, rSrc );
370
0
    }
371
372
    // select the matching instantiation for the source's bitmap format
373
9.49k
    switch( nSrcFormat )
374
9.49k
    {
375
9.49k
        case ScanlineFormat::N8BitPal:
376
9.49k
            if(rSrc.maPalette.IsGreyPalette8Bit())
377
0
                return ImplConvertFromBitmap<ScanlineFormat::N8BitPal>( rDst, rSrc );
378
9.49k
            break;
379
380
9.49k
        case ScanlineFormat::N24BitTcBgr:
381
0
            return ImplConvertFromBitmap<ScanlineFormat::N24BitTcBgr>( rDst, rSrc );
382
0
        case ScanlineFormat::N24BitTcRgb:
383
0
            return ImplConvertFromBitmap<ScanlineFormat::N24BitTcRgb>( rDst, rSrc );
384
385
0
        case ScanlineFormat::N32BitTcAbgr:
386
0
        case ScanlineFormat::N32BitTcXbgr:
387
0
            return ImplConvertFromBitmap<ScanlineFormat::N32BitTcAbgr>( rDst, rSrc );
388
0
        case ScanlineFormat::N32BitTcArgb:
389
0
        case ScanlineFormat::N32BitTcXrgb:
390
0
            return ImplConvertFromBitmap<ScanlineFormat::N32BitTcArgb>( rDst, rSrc );
391
0
        case ScanlineFormat::N32BitTcBgra:
392
0
        case ScanlineFormat::N32BitTcBgrx:
393
0
            return ImplConvertFromBitmap<ScanlineFormat::N32BitTcBgra>( rDst, rSrc );
394
0
        case ScanlineFormat::N32BitTcRgba:
395
0
        case ScanlineFormat::N32BitTcRgbx:
396
0
            return ImplConvertFromBitmap<ScanlineFormat::N32BitTcRgba>( rDst, rSrc );
397
0
        default: break;
398
9.49k
    }
399
400
9.49k
    static int nNotAccelerated = 0;
401
9.49k
    SAL_WARN_IF( rSrc.mnWidth * rSrc.mnHeight >= 4000 && ++nNotAccelerated == 100,
402
9.49k
                 "vcl.gdi",
403
9.49k
                 "ImplFastBitmapConversion for not accelerated case (" << std::hex << int(rSrc.meFormat) << "->" << int(rDst.meFormat) << ")" );
404
405
9.49k
    return false;
406
9.49k
}
407
408
static inline ConstScanline ImplGetScanline( const BitmapBuffer& rBuf, tools::Long nY )
409
0
{
410
0
    if (rBuf.meDirection == ScanlineDirection::TopDown)
411
0
        return rBuf.mpBits + nY * rBuf.mnScanlineSize;
412
0
    else
413
0
        return rBuf.mpBits + (rBuf.mnHeight - 1 - nY) * rBuf.mnScanlineSize;
414
0
}
415
416
static inline Scanline ImplGetScanline( BitmapBuffer& rBuf, tools::Long nY )
417
0
{
418
0
    return const_cast<Scanline>(ImplGetScanline( std::as_const(rBuf), nY ));
419
0
}
420
421
template <ScanlineFormat DSTFMT, ScanlineFormat SRCFMT>
422
static bool ImplCopyToScanline( tools::Long nY, BitmapBuffer& rDst, TrueColorPixelPtr<SRCFMT>& rSrcLine, tools::Long nSrcWidth )
423
0
{
424
0
    TrueColorPixelPtr<DSTFMT> aDstType;
425
0
    aDstType.SetRawPtr( ImplGetScanline( rDst, nY ));
426
0
    ImplConvertLine( aDstType, rSrcLine, std::min( nSrcWidth, rDst.mnWidth ));
427
0
    return true;
428
0
}
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)2, (ScanlineFormat)2>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)3, (ScanlineFormat)2>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)4, (ScanlineFormat)2>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)6, (ScanlineFormat)2>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)8, (ScanlineFormat)2>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)10, (ScanlineFormat)2>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)2>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)2, (ScanlineFormat)3>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)3, (ScanlineFormat)3>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)4, (ScanlineFormat)3>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)6, (ScanlineFormat)3>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)8, (ScanlineFormat)3>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)10, (ScanlineFormat)3>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)3>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)2, (ScanlineFormat)4>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)3, (ScanlineFormat)4>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)4, (ScanlineFormat)4>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)6, (ScanlineFormat)4>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)8, (ScanlineFormat)4>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)10, (ScanlineFormat)4>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)4>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)2, (ScanlineFormat)6>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)3, (ScanlineFormat)6>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)4, (ScanlineFormat)6>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)6, (ScanlineFormat)6>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)8, (ScanlineFormat)6>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)10, (ScanlineFormat)6>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)6>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)2, (ScanlineFormat)8>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)3, (ScanlineFormat)8>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)4, (ScanlineFormat)8>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)6, (ScanlineFormat)8>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)8, (ScanlineFormat)8>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)10, (ScanlineFormat)8>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)8>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)2, (ScanlineFormat)10>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)3, (ScanlineFormat)10>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)4, (ScanlineFormat)10>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)6, (ScanlineFormat)10>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)8, (ScanlineFormat)10>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyToScanline<(ScanlineFormat)10, (ScanlineFormat)10>(long, BitmapBuffer&, (anonymous namespace)::TrueColorPixelPtr<(ScanlineFormat)10>&, long)
429
430
template <ScanlineFormat SRCFMT>
431
static bool ImplCopyFromScanline( tools::Long nY, BitmapBuffer& rDst, ConstScanline aSrcScanline, tools::Long nSrcWidth )
432
0
{
433
0
    TrueColorPixelPtr<SRCFMT> aSrcType;
434
0
    aSrcType.SetRawPtr( const_cast<Scanline>( aSrcScanline ));
435
    // select the matching instantiation for the destination's bitmap format
436
0
    switch (rDst.meFormat)
437
0
    {
438
0
        case ScanlineFormat::N24BitTcBgr:
439
0
            return ImplCopyToScanline<ScanlineFormat::N24BitTcBgr>( nY, rDst, aSrcType, nSrcWidth );
440
0
        case ScanlineFormat::N24BitTcRgb:
441
0
            return ImplCopyToScanline<ScanlineFormat::N24BitTcRgb>( nY, rDst, aSrcType, nSrcWidth );
442
443
0
        case ScanlineFormat::N32BitTcAbgr:
444
0
        case ScanlineFormat::N32BitTcXbgr:
445
0
            return ImplCopyToScanline<ScanlineFormat::N32BitTcAbgr>( nY, rDst, aSrcType, nSrcWidth );
446
0
        case ScanlineFormat::N32BitTcArgb:
447
0
        case ScanlineFormat::N32BitTcXrgb:
448
0
            return ImplCopyToScanline<ScanlineFormat::N32BitTcArgb>( nY, rDst, aSrcType, nSrcWidth );
449
0
        case ScanlineFormat::N32BitTcBgra:
450
0
        case ScanlineFormat::N32BitTcBgrx:
451
0
            return ImplCopyToScanline<ScanlineFormat::N32BitTcBgra>( nY, rDst, aSrcType, nSrcWidth );
452
0
        case ScanlineFormat::N32BitTcRgba:
453
0
        case ScanlineFormat::N32BitTcRgbx:
454
0
            return ImplCopyToScanline<ScanlineFormat::N32BitTcRgba>( nY, rDst, aSrcType, nSrcWidth );
455
0
        default:
456
0
            break;
457
0
    }
458
0
    return false;
459
460
0
}
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyFromScanline<(ScanlineFormat)2>(long, BitmapBuffer&, unsigned char const*, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyFromScanline<(ScanlineFormat)3>(long, BitmapBuffer&, unsigned char const*, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyFromScanline<(ScanlineFormat)4>(long, BitmapBuffer&, unsigned char const*, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyFromScanline<(ScanlineFormat)6>(long, BitmapBuffer&, unsigned char const*, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyFromScanline<(ScanlineFormat)8>(long, BitmapBuffer&, unsigned char const*, long)
Unexecuted instantiation: bmpfast.cxx:bool ImplCopyFromScanline<(ScanlineFormat)10>(long, BitmapBuffer&, unsigned char const*, long)
461
462
bool ImplFastCopyScanline( tools::Long nY, BitmapBuffer& rDst, ConstScanline aSrcScanline,
463
    ScanlineFormat nSrcScanlineFormat, sal_uInt32 nSrcScanlineSize)
464
0
{
465
0
    if( rDst.mnHeight <= nY )
466
0
        return false;
467
468
0
    const ScanlineFormat nSrcFormat = nSrcScanlineFormat;
469
0
    const ScanlineFormat nDstFormat = rDst.meFormat;
470
471
    // special handling of trivial cases
472
0
    if( nSrcFormat == nDstFormat )
473
0
    {
474
0
        memcpy( ImplGetScanline( rDst, nY ), aSrcScanline, std::min<tools::Long>(nSrcScanlineSize, rDst.mnScanlineSize));
475
0
        return true;
476
0
    }
477
478
    // select the matching instantiation for the source's bitmap format
479
0
    switch( nSrcFormat )
480
0
    {
481
0
        case ScanlineFormat::N24BitTcBgr:
482
0
            return ImplCopyFromScanline<ScanlineFormat::N24BitTcBgr>( nY, rDst, aSrcScanline, nSrcScanlineSize / 3 );
483
0
        case ScanlineFormat::N24BitTcRgb:
484
0
            return ImplCopyFromScanline<ScanlineFormat::N24BitTcRgb>( nY, rDst, aSrcScanline, nSrcScanlineSize / 3 );
485
486
0
        case ScanlineFormat::N32BitTcAbgr:
487
0
        case ScanlineFormat::N32BitTcXbgr:
488
0
            return ImplCopyFromScanline<ScanlineFormat::N32BitTcAbgr>( nY, rDst, aSrcScanline, nSrcScanlineSize / 4 );
489
0
        case ScanlineFormat::N32BitTcArgb:
490
0
        case ScanlineFormat::N32BitTcXrgb:
491
0
            return ImplCopyFromScanline<ScanlineFormat::N32BitTcArgb>( nY, rDst, aSrcScanline, nSrcScanlineSize / 4 );
492
0
        case ScanlineFormat::N32BitTcBgra:
493
0
        case ScanlineFormat::N32BitTcBgrx:
494
0
            return ImplCopyFromScanline<ScanlineFormat::N32BitTcBgra>( nY, rDst, aSrcScanline, nSrcScanlineSize / 4 );
495
0
        case ScanlineFormat::N32BitTcRgba:
496
0
        case ScanlineFormat::N32BitTcRgbx:
497
0
            return ImplCopyFromScanline<ScanlineFormat::N32BitTcRgba>( nY, rDst, aSrcScanline, nSrcScanlineSize / 4 );
498
0
        default:
499
0
            break;
500
0
    }
501
0
    return false;
502
0
}
503
504
bool ImplFastCopyScanline( tools::Long nY, BitmapBuffer& rDst, const BitmapBuffer& rSrc)
505
0
{
506
0
    if( nY >= rDst.mnHeight )
507
0
        return false;
508
0
    if( rSrc.maPalette != rDst.maPalette )
509
0
        return false;
510
0
    return ImplFastCopyScanline( nY, rDst, ImplGetScanline( rSrc, nY ), rSrc.meFormat, rSrc.mnScanlineSize);
511
0
}
512
513
bool ImplFastEraseBitmap( BitmapBuffer& rDst, const BitmapColor& rColor )
514
105k
{
515
    // erasing a bitmap is often just a byte-wise memory fill
516
105k
    bool bByteFill = true;
517
105k
    sal_uInt8 nFillByte;
518
519
105k
    switch (rDst.meFormat)
520
105k
    {
521
100k
        case ScanlineFormat::N8BitPal:
522
100k
            nFillByte = rColor.GetIndex();
523
100k
            break;
524
525
4.63k
        case ScanlineFormat::N24BitTcBgr:
526
4.63k
        case ScanlineFormat::N24BitTcRgb:
527
4.63k
            nFillByte = rColor.GetRed();
528
4.63k
            if( (nFillByte != rColor.GetGreen())
529
3.06k
            ||  (nFillByte != rColor.GetBlue()) )
530
1.78k
                bByteFill = false;
531
4.63k
            break;
532
533
0
        default:
534
0
            bByteFill = false;
535
0
            nFillByte = 0x00;
536
0
            break;
537
105k
    }
538
539
105k
    if( bByteFill )
540
103k
    {
541
103k
        tools::Long nByteCount = rDst.mnHeight * rDst.mnScanlineSize;
542
103k
        memset( rDst.mpBits, nFillByte, nByteCount );
543
103k
        return true;
544
103k
    }
545
546
    // TODO: handle other bitmap formats
547
1.78k
    switch (rDst.meFormat)
548
1.78k
    {
549
1.78k
        case ScanlineFormat::N24BitTcBgr:
550
1.78k
        case ScanlineFormat::N24BitTcRgb:
551
552
1.78k
        case ScanlineFormat::N32BitTcAbgr:
553
1.78k
        case ScanlineFormat::N32BitTcArgb:
554
1.78k
        case ScanlineFormat::N32BitTcBgra:
555
1.78k
        case ScanlineFormat::N32BitTcRgba:
556
1.78k
        case ScanlineFormat::N32BitTcXbgr:
557
1.78k
        case ScanlineFormat::N32BitTcXrgb:
558
1.78k
        case ScanlineFormat::N32BitTcBgrx:
559
1.78k
        case ScanlineFormat::N32BitTcRgbx:
560
1.78k
            break;
561
562
0
        default:
563
0
            break;
564
1.78k
    }
565
566
1.78k
    return false;
567
1.78k
}
568
569
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */