Files
UnrealEngineUWP/Engine/Source/Developer/ImageWrapper/Private/IcnsImageWrapper.cpp
Michael Trepka d42a73f8bb Properly handle BGRA format in FIcnsImageWrapper
[CL 2713366 by Michael Trepka in Main branch]
2015-10-01 15:06:33 -04:00

77 lines
2.0 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "ImageWrapperPrivatePCH.h"
#include "BmpImageSupport.h"
/**
* ICNS image wrapper class.
*/
FIcnsImageWrapper::FIcnsImageWrapper()
: FImageWrapperBase()
{
}
bool FIcnsImageWrapper::SetCompressed( const void* InCompressedData, int32 InCompressedSize )
{
#if PLATFORM_MAC
return FImageWrapperBase::SetCompressed(InCompressedData, InCompressedSize);
#else
return false;
#endif
}
bool FIcnsImageWrapper::SetRaw( const void* InRawData, int32 InRawSize, const int32 InWidth, const int32 InHeight, const ERGBFormat::Type InFormat, const int32 InBitDepth )
{
#if PLATFORM_MAC
return FImageWrapperBase::SetRaw(InRawData, InRawSize, InWidth, InHeight, InFormat, InBitDepth);
#else
return false;
#endif
}
void FIcnsImageWrapper::Compress(int32 Quality)
{
checkf(false, TEXT("ICNS compression not supported"));
}
void FIcnsImageWrapper::Uncompress(const ERGBFormat::Type InFormat, const int32 InBitDepth)
{
#if PLATFORM_MAC
SCOPED_AUTORELEASE_POOL;
NSData* ImageData = [NSData dataWithBytesNoCopy:CompressedData.GetData() length:CompressedData.Num() freeWhenDone:NO];
NSImage* Image = [[NSImage alloc] initWithData:ImageData];
if (Image)
{
NSBitmapImageRep* Bitmap = [NSBitmapImageRep imageRepWithData:[Image TIFFRepresentation]];
if (Bitmap)
{
check(InFormat == ERGBFormat::BGRA || InFormat == ERGBFormat::RGBA);
check(InBitDepth == 8);
RawData.Empty();
RawData.Append([Bitmap bitmapData], [Bitmap bytesPerPlane]);
RawFormat = Format = InFormat;
RawBitDepth = BitDepth = InBitDepth;
Width = [Bitmap pixelsWide];
Height = [Bitmap pixelsHigh];
if (Format == ERGBFormat::BGRA)
{
for (int32 Index = 0; Index < [Bitmap bytesPerPlane]; Index += 4)
{
uint8 Byte = RawData[Index];
RawData[Index] = RawData[Index + 2];
RawData[Index + 2] = Byte;
}
}
}
[Image release];
}
#else
checkf(false, TEXT("ICNS uncompressing not supported on this platform"));
#endif
}