// // Copyright 2013 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. //
// copyimage.cpp: Defines image copying functions
#include"image_util/copyimage.h"
namespace angle
{
namespace
{ inline uint32_t SwizzleBGRAToRGBA(uint32_t argb)
{ return ((argb & 0x000000FF) << 16) | // Move BGRA blue to RGBA blue
((argb & 0x00FF0000) >> 16) | // Move BGRA red to RGBA red
((argb & 0xFF00FF00)); // Keep alpha and green
}
void CopyBGRA8ToRGBA8Fast(const uint8_t *source, int srcYAxisPitch,
uint8_t *dest, int destYAxisPitch, int destWidth, int destHeight)
{ for (int y = 0; y < destHeight; ++y)
{ const uint32_t *src32 = reinterpret_cast<const uint32_t *>(source + y * srcYAxisPitch);
uint32_t *dest32 = reinterpret_cast<uint32_t *>(dest + y * destYAxisPitch); const uint32_t *end32 = src32 + destWidth; while (src32 != end32)
{
*dest32++ = SwizzleBGRAToRGBA(*src32++);
}
}
}
} // namespace
void CopyBGRA8ToRGBA8(const uint8_t *source, int srcXAxisPitch, int srcYAxisPitch,
uint8_t *dest, int destXAxisPitch, int destYAxisPitch, int destWidth, int destHeight)
{ if (srcXAxisPitch == 4 && destXAxisPitch == 4)
{
CopyBGRA8ToRGBA8Fast(source, srcYAxisPitch, dest, destYAxisPitch, destWidth, destHeight); return;
}
for (int y = 0; y < destHeight; ++y)
{
uint8_t *dst = dest + y * destYAxisPitch; const uint8_t *src = source + y * srcYAxisPitch; const uint8_t *end = src + destWidth * srcXAxisPitch;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.