Use a better image resize code
The box filter from irrlicht produces wrong brightness when using with different size
This commit is contained in:
parent
b8fbc79306
commit
074039d2c5
@ -150,6 +150,17 @@ LOCAL_CFLAGS := -I../lib/bullet/src/
|
|||||||
include $(BUILD_STATIC_LIBRARY)
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
|
|
||||||
|
# Graphics utils
|
||||||
|
LOCAL_MODULE := graphics_utils
|
||||||
|
LOCAL_PATH := .
|
||||||
|
LOCAL_CPP_FEATURES += rtti
|
||||||
|
LOCAL_SRC_FILES := $(wildcard ../lib/graphics_utils/mipmap/*.c)
|
||||||
|
LOCAL_CFLAGS := -I../lib/graphics_utils/mipmap
|
||||||
|
include $(BUILD_STATIC_LIBRARY)
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
|
|
||||||
# Irrlicht
|
# Irrlicht
|
||||||
LOCAL_MODULE := irrlicht
|
LOCAL_MODULE := irrlicht
|
||||||
LOCAL_PATH := .
|
LOCAL_PATH := .
|
||||||
@ -184,6 +195,7 @@ LOCAL_CFLAGS := -I../lib/angelscript/include \
|
|||||||
-I../lib/ifaddrs \
|
-I../lib/ifaddrs \
|
||||||
-I../lib/irrlicht/include \
|
-I../lib/irrlicht/include \
|
||||||
-I../lib/irrlicht/source/Irrlicht \
|
-I../lib/irrlicht/source/Irrlicht \
|
||||||
|
-I../lib/graphics_utils \
|
||||||
-I../src \
|
-I../src \
|
||||||
-Iobj/curl/include \
|
-Iobj/curl/include \
|
||||||
-Iobj/fribidi/include \
|
-Iobj/fribidi/include \
|
||||||
@ -205,7 +217,7 @@ LOCAL_CPPFLAGS := -std=gnu++0x
|
|||||||
|
|
||||||
LOCAL_STATIC_LIBRARIES := irrlicht bullet enet ifaddrs angelscript \
|
LOCAL_STATIC_LIBRARIES := irrlicht bullet enet ifaddrs angelscript \
|
||||||
vorbisfile vorbis ogg openal curl libssl libcrypto \
|
vorbisfile vorbis ogg openal curl libssl libcrypto \
|
||||||
gnustl_static raqm fribidi harfbuzz freetype
|
gnustl_static raqm fribidi harfbuzz freetype graphics_utils
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
include $(CLEAR_VARS)
|
include $(CLEAR_VARS)
|
||||||
|
@ -368,11 +368,6 @@ void CImage::copyToScalingBoxFilter(IImage* target, s32 bias, bool blend)
|
|||||||
s32 fy = core::ceil32( sourceYStep );
|
s32 fy = core::ceil32( sourceYStep );
|
||||||
f32 sx;
|
f32 sx;
|
||||||
f32 sy;
|
f32 sy;
|
||||||
// Color emoji scaled wrongly with overbright color if larger than 4
|
|
||||||
if (fx > 4)
|
|
||||||
fx = 4;
|
|
||||||
if (fy > 4)
|
|
||||||
fy = 4;
|
|
||||||
|
|
||||||
sy = 0.f;
|
sy = 0.f;
|
||||||
for ( u32 y = 0; y != destSize.Height; ++y )
|
for ( u32 y = 0; y != destSize.Height; ++y )
|
||||||
|
@ -36,6 +36,14 @@
|
|||||||
#include "GlyphLayout.h"
|
#include "GlyphLayout.h"
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
|
#ifndef SERVER_ONLY
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#include <mipmap/img.h>
|
||||||
|
#include <mipmap/imgresize.h>
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
/** Constructor. It will initialize the \ref m_spritebank and TTF files to use.
|
/** Constructor. It will initialize the \ref m_spritebank and TTF files to use.
|
||||||
* \param name The name of face, used by irrlicht to distinguish spritebank.
|
* \param name The name of face, used by irrlicht to distinguish spritebank.
|
||||||
@ -280,7 +288,27 @@ void FontWithFace::insertGlyph(unsigned font_number, unsigned glyph_index)
|
|||||||
->getVideoDriver()->createImage(video::ECF_A8R8G8B8,
|
->getVideoDriver()->createImage(video::ECF_A8R8G8B8,
|
||||||
{ cur_glyph_width , cur_glyph_height});
|
{ cur_glyph_width , cur_glyph_height});
|
||||||
assert(scaled);
|
assert(scaled);
|
||||||
unscaled->copyToScalingBoxFilter(scaled);
|
if (cur_glyph_width >= bits->width ||
|
||||||
|
cur_glyph_height >= bits->rows)
|
||||||
|
{
|
||||||
|
unscaled->copyToScaling(scaled);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
imReduceOptions options;
|
||||||
|
imReduceSetOptions(&options, IM_REDUCE_FILTER_LINEAR/*filter*/,
|
||||||
|
3/*hopcount*/, 16.0f/*alpha*/, 1.0f/*amplifynormal*/,
|
||||||
|
0.0f/*normalsustainfactor*/);
|
||||||
|
int ret = imReduceImageKaiserData((unsigned char*)scaled->lock(),
|
||||||
|
(unsigned char*)unscaled->lock(), bits->width, bits->rows, 4,
|
||||||
|
bits->width * 4, cur_glyph_width , cur_glyph_height,
|
||||||
|
&options);
|
||||||
|
if (ret != 1)
|
||||||
|
{
|
||||||
|
Log::error("FontWithFace",
|
||||||
|
"Error reduce bitmap font size.");
|
||||||
|
}
|
||||||
|
}
|
||||||
uint8_t* scaled_data = (uint8_t*)scaled->lock();
|
uint8_t* scaled_data = (uint8_t*)scaled->lock();
|
||||||
for (unsigned int i = 0; i < cur_glyph_width * cur_glyph_height;
|
for (unsigned int i = 0; i < cur_glyph_width * cur_glyph_height;
|
||||||
i++)
|
i++)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user