Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/WolfireGames/overgrowth.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Images/freeimage_wrapper.cpp')
-rw-r--r--Source/Images/freeimage_wrapper.cpp193
1 files changed, 89 insertions, 104 deletions
diff --git a/Source/Images/freeimage_wrapper.cpp b/Source/Images/freeimage_wrapper.cpp
index 3f503948..50e58890 100644
--- a/Source/Images/freeimage_wrapper.cpp
+++ b/Source/Images/freeimage_wrapper.cpp
@@ -42,16 +42,14 @@
using namespace crnlib;
using std::string;
-//http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn
+// http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn
static const uint32_t MultiplyDeBruijnBitPosition[32] =
-{
- 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30,
- 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31
-};
-
+ {
+ 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30,
+ 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31};
static uint32_t uintLog2(uint32_t v) {
- v |= v >> 1; // first round down to one less than a power of 2
+ v |= v >> 1; // first round down to one less than a power of 2
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
@@ -60,11 +58,10 @@ static uint32_t uintLog2(uint32_t v) {
return MultiplyDeBruijnBitPosition[(uint32_t)(v * 0x07C4ACDDU) >> 27];
}
-
vec3 getInterpolatedColorUV(FIBITMAP* image, float x, float y) {
- x = max(0.01f,min(0.99f, x));
- y = max(0.01f,min(0.99f, y));
- return getInterpolatedColor(image, x*FreeImage_GetWidth(image)+0.5f, y*FreeImage_GetHeight(image)+1.0f);
+ x = max(0.01f, min(0.99f, x));
+ y = max(0.01f, min(0.99f, y));
+ return getInterpolatedColor(image, x * FreeImage_GetWidth(image) + 0.5f, y * FreeImage_GetHeight(image) + 1.0f);
}
vec3 getInterpolatedColor(FIBITMAP* image, float x, float y) {
@@ -74,82 +71,82 @@ vec3 getInterpolatedColor(FIBITMAP* image, float x, float y) {
(unsigned int)y,
&top_left);
FreeImage_GetPixelColor(image,
- (unsigned int)x+1,
+ (unsigned int)x + 1,
(unsigned int)y,
&top_right);
FreeImage_GetPixelColor(image,
(unsigned int)x,
- (unsigned int)y+1,
+ (unsigned int)y + 1,
&bottom_left);
FreeImage_GetPixelColor(image,
- (unsigned int)x+1,
- (unsigned int)y+1,
+ (unsigned int)x + 1,
+ (unsigned int)y + 1,
&bottom_right);
-
+
float x_weight = x - (int)x;
float y_weight = y - (int)y;
-
+
RGBQUAD left;
- left.rgbRed = (BYTE)(top_left.rgbRed * (1-y_weight) + bottom_left.rgbRed * (y_weight));
- left.rgbGreen = (BYTE)(top_left.rgbGreen * (1-y_weight) + bottom_left.rgbGreen * (y_weight));
- left.rgbBlue = (BYTE)(top_left.rgbBlue * (1-y_weight) + bottom_left.rgbBlue * (y_weight));
- RGBQUAD right;
- right.rgbRed = (BYTE)(top_right.rgbRed * (1-y_weight) + bottom_right.rgbRed * (y_weight));
- right.rgbGreen = (BYTE)(top_right.rgbGreen * (1-y_weight) + bottom_right.rgbGreen * (y_weight));
- right.rgbBlue = (BYTE)(top_right.rgbBlue * (1-y_weight) + bottom_right.rgbBlue * (y_weight));
-
+ left.rgbRed = (BYTE)(top_left.rgbRed * (1 - y_weight) + bottom_left.rgbRed * (y_weight));
+ left.rgbGreen = (BYTE)(top_left.rgbGreen * (1 - y_weight) + bottom_left.rgbGreen * (y_weight));
+ left.rgbBlue = (BYTE)(top_left.rgbBlue * (1 - y_weight) + bottom_left.rgbBlue * (y_weight));
+ RGBQUAD right;
+ right.rgbRed = (BYTE)(top_right.rgbRed * (1 - y_weight) + bottom_right.rgbRed * (y_weight));
+ right.rgbGreen = (BYTE)(top_right.rgbGreen * (1 - y_weight) + bottom_right.rgbGreen * (y_weight));
+ right.rgbBlue = (BYTE)(top_right.rgbBlue * (1 - y_weight) + bottom_right.rgbBlue * (y_weight));
+
vec3 value(0.0f);
- value.r() = ((BYTE)(left.rgbRed * (1-x_weight) + right.rgbRed * (x_weight)))/255.0f;
- value.g() = ((BYTE)(left.rgbGreen * (1-x_weight) + right.rgbGreen * (x_weight)))/255.0f;
- value.b() = ((BYTE)(left.rgbBlue * (1-x_weight) + right.rgbBlue * (x_weight)))/255.0f;
-
+ value.r() = ((BYTE)(left.rgbRed * (1 - x_weight) + right.rgbRed * (x_weight))) / 255.0f;
+ value.g() = ((BYTE)(left.rgbGreen * (1 - x_weight) + right.rgbGreen * (x_weight))) / 255.0f;
+ value.b() = ((BYTE)(left.rgbBlue * (1 - x_weight) + right.rgbBlue * (x_weight))) / 255.0f;
+
return value;
}
vec4 getInterpolatedRGBAUV(FIBITMAP* image, float x, float y) {
- x = max(0.01f,min(0.99f, x));
- y = max(0.01f,min(0.99f, y));
- return getInterpolatedRGBA(image, x*FreeImage_GetWidth(image)+0.5f, y*FreeImage_GetHeight(image)+1.0f);
+ x = max(0.01f, min(0.99f, x));
+ y = max(0.01f, min(0.99f, y));
+ return getInterpolatedRGBA(image, x * FreeImage_GetWidth(image) + 0.5f, y * FreeImage_GetHeight(image) + 1.0f);
}
vec4 getInterpolatedRGBA(FIBITMAP* image, float x, float y) {
RGBQUAD top_left, top_right, bottom_left, bottom_right;
FreeImage_GetPixelColor(image,
- (unsigned int)x,
- (unsigned int)y,
- &top_left);
+ (unsigned int)x,
+ (unsigned int)y,
+ &top_left);
FreeImage_GetPixelColor(image,
- (unsigned int)x+1,
- (unsigned int)y,
- &top_right);
+ (unsigned int)x + 1,
+ (unsigned int)y,
+ &top_right);
FreeImage_GetPixelColor(image,
- (unsigned int)x,
- (unsigned int)y+1,
- &bottom_left);
+ (unsigned int)x,
+ (unsigned int)y + 1,
+ &bottom_left);
FreeImage_GetPixelColor(image,
- (unsigned int)x+1,
- (unsigned int)y+1,
- &bottom_right);
+ (unsigned int)x + 1,
+ (unsigned int)y + 1,
+ &bottom_right);
float x_weight = x - (int)x;
float y_weight = y - (int)y;
RGBQUAD left;
- left.rgbRed = (BYTE)(top_left.rgbRed * (1-y_weight) + bottom_left.rgbRed * (y_weight));
- left.rgbGreen = (BYTE)(top_left.rgbGreen * (1-y_weight) + bottom_left.rgbGreen * (y_weight));
- left.rgbBlue = (BYTE)(top_left.rgbBlue * (1-y_weight) + bottom_left.rgbBlue * (y_weight));
- left.rgbReserved = (BYTE)(top_left.rgbReserved * (1-y_weight) + bottom_left.rgbReserved * (y_weight));
- RGBQUAD right;
- right.rgbRed = (BYTE)(top_right.rgbRed * (1-y_weight) + bottom_right.rgbRed * (y_weight));
- right.rgbGreen = (BYTE)(top_right.rgbGreen * (1-y_weight) + bottom_right.rgbGreen * (y_weight));
- right.rgbBlue = (BYTE)(top_right.rgbBlue * (1-y_weight) + bottom_right.rgbBlue * (y_weight));
- right.rgbReserved = (BYTE)(top_right.rgbReserved * (1-y_weight) + bottom_right.rgbReserved * (y_weight));
+ left.rgbRed = (BYTE)(top_left.rgbRed * (1 - y_weight) + bottom_left.rgbRed * (y_weight));
+ left.rgbGreen = (BYTE)(top_left.rgbGreen * (1 - y_weight) + bottom_left.rgbGreen * (y_weight));
+ left.rgbBlue = (BYTE)(top_left.rgbBlue * (1 - y_weight) + bottom_left.rgbBlue * (y_weight));
+ left.rgbReserved = (BYTE)(top_left.rgbReserved * (1 - y_weight) + bottom_left.rgbReserved * (y_weight));
+ RGBQUAD right;
+ right.rgbRed = (BYTE)(top_right.rgbRed * (1 - y_weight) + bottom_right.rgbRed * (y_weight));
+ right.rgbGreen = (BYTE)(top_right.rgbGreen * (1 - y_weight) + bottom_right.rgbGreen * (y_weight));
+ right.rgbBlue = (BYTE)(top_right.rgbBlue * (1 - y_weight) + bottom_right.rgbBlue * (y_weight));
+ right.rgbReserved = (BYTE)(top_right.rgbReserved * (1 - y_weight) + bottom_right.rgbReserved * (y_weight));
vec4 value(0.0f);
- value.r() = ((BYTE)(left.rgbRed * (1-x_weight) + right.rgbRed * (x_weight)))/255.0f;
- value.g() = ((BYTE)(left.rgbGreen * (1-x_weight) + right.rgbGreen * (x_weight)))/255.0f;
- value.b() = ((BYTE)(left.rgbBlue * (1-x_weight) + right.rgbBlue * (x_weight)))/255.0f;
- value.a() = ((BYTE)(left.rgbReserved * (1-x_weight) + right.rgbReserved * (x_weight)))/255.0f;
+ value.r() = ((BYTE)(left.rgbRed * (1 - x_weight) + right.rgbRed * (x_weight))) / 255.0f;
+ value.g() = ((BYTE)(left.rgbGreen * (1 - x_weight) + right.rgbGreen * (x_weight))) / 255.0f;
+ value.b() = ((BYTE)(left.rgbBlue * (1 - x_weight) + right.rgbBlue * (x_weight))) / 255.0f;
+ value.a() = ((BYTE)(left.rgbReserved * (1 - x_weight) + right.rgbReserved * (x_weight))) / 255.0f;
return value;
}
@@ -160,51 +157,44 @@ vec3 getColor(FIBITMAP* image, float x, float y) {
(unsigned int)x,
(unsigned int)y,
&color);
- return vec3(color.rgbRed,color.rgbGreen,color.rgbBlue);
+ return vec3(color.rgbRed, color.rgbGreen, color.rgbBlue);
}
-unsigned int getWidth(FIBITMAP* image)
-{
- return FreeImage_GetWidth(image);
+unsigned int getWidth(FIBITMAP* image) {
+ return FreeImage_GetWidth(image);
}
-unsigned int getHeight(FIBITMAP* image)
-{
- return FreeImage_GetHeight(image);
+unsigned int getHeight(FIBITMAP* image) {
+ return FreeImage_GetHeight(image);
}
-int getPixelColor(FIBITMAP* image, unsigned int x, unsigned int y, FIquad* value )
-{
- RGBQUAD quad;
- int ret = FreeImage_GetPixelColor(image,x,y,&quad);
- value->rgbRed= quad.rgbRed;
- value->rgbGreen = quad.rgbGreen;
- value->rgbBlue = quad.rgbBlue;
- value->rgbReserved = quad.rgbReserved;
- return ret;
+int getPixelColor(FIBITMAP* image, unsigned int x, unsigned int y, FIquad* value) {
+ RGBQUAD quad;
+ int ret = FreeImage_GetPixelColor(image, x, y, &quad);
+ value->rgbRed = quad.rgbRed;
+ value->rgbGreen = quad.rgbGreen;
+ value->rgbBlue = quad.rgbBlue;
+ value->rgbReserved = quad.rgbReserved;
+ return ret;
}
-void UnloadBitmap(FIBITMAP* image)
-{
- FreeImage_Unload(image);
+void UnloadBitmap(FIBITMAP* image) {
+ FreeImage_Unload(image);
}
-fiTYPE getImageType(FIBITMAP* image)
-{
- return (fiTYPE)FreeImage_GetImageType(image);
+fiTYPE getImageType(FIBITMAP* image) {
+ return (fiTYPE)FreeImage_GetImageType(image);
}
-unsigned int getBPP(FIBITMAP* image)
-{
- return FreeImage_GetBPP(image);
+unsigned int getBPP(FIBITMAP* image) {
+ return FreeImage_GetBPP(image);
}
-uint8_t* getScanLine(FIBITMAP* image, int scanline)
-{
- return FreeImage_GetScanLine(image,scanline);
+uint8_t* getScanLine(FIBITMAP* image, int scanline) {
+ return FreeImage_GetScanLine(image, scanline);
}
-/** Generic image loader -- from FreeImage documentation:
+/** Generic image loader -- from FreeImage documentation:
http://internap.dl.sourceforge.net/sourceforge/freeimage/FreeImage3110.pdf
@param lpszPathName Pointer to the full file name
@param flag Optional load flag constant
@@ -212,56 +202,51 @@ http://internap.dl.sourceforge.net/sourceforge/freeimage/FreeImage3110.pdf
*/
FIBITMAP* GenericLoader(const char* abs_path, int flag) {
#ifdef _WIN32
- string path_str = abs_path;
- ShortenWindowsPath(path_str);
- const char* path = path_str.c_str();
+ string path_str = abs_path;
+ ShortenWindowsPath(path_str);
+ const char* path = path_str.c_str();
#else
- const char *path = abs_path;
+ const char* path = abs_path;
#endif
FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
// check the file signature and deduce its format
// (the second argument is currently not used by FreeImage)
fif = FreeImage_GetFileType(path, 0);
- if(fif == FIF_UNKNOWN) {
+ if (fif == FIF_UNKNOWN) {
// no signature ?
// try to guess the file format from the file extension
fif = FreeImage_GetFIFFromFilename(path);
}
// check that the plugin has reading capabilities ...
- if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) {
+ if ((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) {
// ok, let's load the file
- FIBITMAP *dib = FreeImage_Load(fif, path, flag);
+ FIBITMAP* dib = FreeImage_Load(fif, path, flag);
// unless a bad file format, we are done !
return dib;
}
return NULL;
}
-FIBitmapContainer::FIBitmapContainer(FIBITMAP* _image)
-{
+FIBitmapContainer::FIBitmapContainer(FIBITMAP* _image) {
image = _image;
}
-FIBitmapContainer::~FIBitmapContainer()
-{
+FIBitmapContainer::~FIBitmapContainer() {
reset(NULL);
}
-void FIBitmapContainer::reset(FIBITMAP* _image)
-{
- if(image){
+void FIBitmapContainer::reset(FIBITMAP* _image) {
+ if (image) {
FreeImage_Unload(image);
image = NULL;
}
image = _image;
}
-FIBITMAP* FIBitmapContainer::get()
-{
+FIBITMAP* FIBitmapContainer::get() {
return image;
}
-const FIBITMAP* FIBitmapContainer::get() const
-{
+const FIBITMAP* FIBitmapContainer::get() const {
return image;
}