[DEV] add egami-cutter
This commit is contained in:
parent
37c83f9728
commit
4e50a21fa5
13
tools/cutter/appl/debug.cpp
Normal file
13
tools/cutter/appl/debug.cpp
Normal file
@ -0,0 +1,13 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2010, Edouard DUPIN, all right reserved
|
||||
* @license GPL v3 (see license file)
|
||||
*/
|
||||
|
||||
|
||||
#include <appl/debug.hpp>
|
||||
|
||||
int32_t appl::getLogId() {
|
||||
static int32_t g_val = elog::registerInstance("egami-cutter");
|
||||
return g_val;
|
||||
}
|
46
tools/cutter/appl/debug.hpp
Normal file
46
tools/cutter/appl/debug.hpp
Normal file
@ -0,0 +1,46 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <elog/log.hpp>
|
||||
extern "C" {
|
||||
#include <assert.h>
|
||||
}
|
||||
namespace appl {
|
||||
/**
|
||||
* @brief Get local id of the library
|
||||
* @return Unique ID of the library
|
||||
*/
|
||||
int32_t getLogId();
|
||||
};
|
||||
|
||||
#define APPL_BASIC(info,data) ELOG_BASE(appl::getLogId(),info,data)
|
||||
|
||||
#define APPL_PRINT(data) APPL_BASIC(-1, data)
|
||||
#define APPL_CRITICAL(data) APPL_BASIC(1, data)
|
||||
#define APPL_ERROR(data) APPL_BASIC(2, data)
|
||||
#define APPL_WARNING(data) APPL_BASIC(3, data)
|
||||
#ifdef DEBUG
|
||||
#define APPL_INFO(data) APPL_BASIC(4, data)
|
||||
#define APPL_DEBUG(data) APPL_BASIC(5, data)
|
||||
#define APPL_VERBOSE(data) APPL_BASIC(6, data)
|
||||
#define APPL_TODO(data) APPL_BASIC(4, "TODO : " << data)
|
||||
#else
|
||||
#define APPL_INFO(data) do { } while(false)
|
||||
#define APPL_DEBUG(data) do { } while(false)
|
||||
#define APPL_VERBOSE(data) do { } while(false)
|
||||
#define APPL_TODO(data) do { } while(false)
|
||||
#endif
|
||||
|
||||
#define APPL_HIDDEN(data) do { } while(false)
|
||||
|
||||
#define APPL_ASSERT(cond,data) \
|
||||
do { \
|
||||
if (!(cond)) { \
|
||||
APPL_CRITICAL(data); \
|
||||
assert(!#cond); \
|
||||
} \
|
||||
} while (0)
|
166
tools/cutter/appl/main.cpp
Normal file
166
tools/cutter/appl/main.cpp
Normal file
@ -0,0 +1,166 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <appl/debug.hpp>
|
||||
#include <etk/etk.hpp>
|
||||
#include <egami/egami.hpp>
|
||||
|
||||
static void usage(int _retValue = 0) {
|
||||
APPL_PRINT("Help : ");
|
||||
APPL_PRINT(" ./xxx [options]");
|
||||
APPL_PRINT(" -h/--help: Display this help");
|
||||
APPL_PRINT(" -i/--input: Input of the calculator");
|
||||
APPL_PRINT(" -o/--output: Output of the calculator");
|
||||
|
||||
exit(_retValue);
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, const char *argv[]) {
|
||||
// the only one init for etk:
|
||||
etk::init(argc, argv);
|
||||
etk::String input;
|
||||
etk::String output;
|
||||
for (int32_t iii=0; iii<argc ; ++iii) {
|
||||
etk::String data = argv[iii];
|
||||
if ( data == "-h"
|
||||
|| data == "--help") {
|
||||
usage();
|
||||
} else if (data.startWith("-i=") == true) {
|
||||
input = etk::String(data.begin() + 3, data.end());
|
||||
} else if (data.startWith("--input=") == true) {
|
||||
input = etk::String(data.begin() + 8, data.end());
|
||||
} else if (data.startWith("-o=") == true) {
|
||||
output = etk::String(data.begin() + 3, data.end());
|
||||
} else if (data.startWith("--output=") == true) {
|
||||
output = etk::String(data.begin() + 9, data.end());
|
||||
}
|
||||
}
|
||||
if (input == "") {
|
||||
APPL_ERROR("Missing Input ...");
|
||||
usage(-1);
|
||||
}
|
||||
if (output == "") {
|
||||
APPL_ERROR("Missing output ...");
|
||||
usage(-1);
|
||||
}
|
||||
APPL_INFO("read [START] " << input);
|
||||
egami::Image image;
|
||||
image = egami::load(input);
|
||||
if (image.exist() == false) {
|
||||
APPL_ERROR("read [STOP ] ==> an error occured...");
|
||||
return -2;
|
||||
}
|
||||
APPL_INFO("read [STOP ]");
|
||||
|
||||
ivec2 middle = image.getSize() / 2;
|
||||
|
||||
APPL_INFO("Source Image Size:" << image.getSize());
|
||||
|
||||
uint8_t baseValue = 0x40;
|
||||
|
||||
// top:
|
||||
uint_t posTop = 0;
|
||||
uint_t posBottom = image.getSize().y();
|
||||
uint_t posLeft = 0;
|
||||
uint_t posRight = image.getSize().x();
|
||||
uint_t maxOutOfRange = 3;
|
||||
for (uint_t yyy=0; yyy<middle.y()-maxOutOfRange; ++yyy) {
|
||||
bool found = false;
|
||||
//APPL_DEBUG("Check position:" << yyy);
|
||||
for (uint_t iii=0; iii<maxOutOfRange; ++iii) {
|
||||
auto val1 = image.get(ivec2(middle.x(), yyy+iii));
|
||||
//APPL_VERBOSE("Check value:" << iii << " " << val1);
|
||||
if ( val1.r() < baseValue
|
||||
&& val1.g() < baseValue
|
||||
&& val1.b() < baseValue) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found == true) {
|
||||
continue;
|
||||
}
|
||||
posTop = yyy;
|
||||
break;
|
||||
}
|
||||
APPL_INFO("Clip on TOP:" << posTop);
|
||||
for (uint_t yyy=image.getSize().y()-1; yyy>=middle.y()+maxOutOfRange; --yyy) {
|
||||
bool found = false;
|
||||
//APPL_DEBUG("Check position:" << yyy);
|
||||
for (uint_t iii=0; iii<maxOutOfRange; ++iii) {
|
||||
auto val1 = image.get(ivec2(middle.x(), yyy-iii));
|
||||
//APPL_VERBOSE("Check value:" << iii << " " << val1);
|
||||
if ( val1.r() < baseValue
|
||||
&& val1.g() < baseValue
|
||||
&& val1.b() < baseValue) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found == true) {
|
||||
continue;
|
||||
}
|
||||
posBottom = yyy;
|
||||
break;
|
||||
}
|
||||
APPL_INFO("Clip on BOTTOM:" << posBottom);
|
||||
|
||||
for (uint_t xxx=0; xxx<middle.x()-maxOutOfRange; ++xxx) {
|
||||
bool found = false;
|
||||
//APPL_DEBUG("Check position:" << yyy);
|
||||
for (uint_t iii=0; iii<maxOutOfRange; ++iii) {
|
||||
auto val1 = image.get(ivec2(xxx+iii, middle.y()));
|
||||
//APPL_VERBOSE("Check value:" << iii << " " << val1);
|
||||
if ( val1.r() < baseValue
|
||||
&& val1.g() < baseValue
|
||||
&& val1.b() < baseValue) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found == true) {
|
||||
continue;
|
||||
}
|
||||
posLeft = xxx;
|
||||
break;
|
||||
}
|
||||
APPL_INFO("Clip on LEFT:" << posLeft);
|
||||
for (uint_t xxx=image.getSize().x()-1; xxx>=middle.x()+maxOutOfRange; --xxx) {
|
||||
bool found = false;
|
||||
//APPL_DEBUG("Check position:" << yyy);
|
||||
for (uint_t iii=0; iii<maxOutOfRange; ++iii) {
|
||||
auto val1 = image.get(ivec2(xxx-iii, middle.y()));
|
||||
//APPL_VERBOSE("Check value:" << iii << " " << val1);
|
||||
if ( val1.r() < baseValue
|
||||
&& val1.g() < baseValue
|
||||
&& val1.b() < baseValue) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found == true) {
|
||||
continue;
|
||||
}
|
||||
posRight = xxx;
|
||||
break;
|
||||
}
|
||||
APPL_INFO("Clip on Right:" << posRight);
|
||||
|
||||
image.resize(ivec2(image.getSize().x() - posLeft - (image.getSize().x() - posRight),
|
||||
image.getSize().y() - posTop - (image.getSize().y() - posBottom)),
|
||||
ivec2(posLeft, posTop));
|
||||
|
||||
APPL_INFO("output Image Size:" << image.getSize());
|
||||
APPL_INFO("write [START] " << output);
|
||||
bool ret = egami::store(image, output);
|
||||
if (ret == false) {
|
||||
APPL_ERROR("write [STOP ] ==> an error occured...");
|
||||
return -3;
|
||||
}
|
||||
APPL_INFO("write [STOP ]");
|
||||
return 0;
|
||||
}
|
46
tools/cutter/lutin_egami-cutter.py
Executable file
46
tools/cutter/lutin_egami-cutter.py
Executable file
@ -0,0 +1,46 @@
|
||||
#!/usr/bin/python
|
||||
import lutin.debug as debug
|
||||
import lutin.tools as tools
|
||||
import os
|
||||
|
||||
def get_type():
|
||||
return "BINARY"
|
||||
|
||||
def get_sub_type():
|
||||
return "TOOL"
|
||||
|
||||
def get_desc():
|
||||
return "egami simple image cutter (bash tools)"
|
||||
|
||||
def get_licence():
|
||||
return "MPL-2"
|
||||
|
||||
def get_compagny_type():
|
||||
return "com"
|
||||
|
||||
def get_compagny_name():
|
||||
return "atria-soft"
|
||||
|
||||
def get_maintainer():
|
||||
return ["Mr DUPIN Edouard <yui.heero@gmail.com>"]
|
||||
|
||||
def configure(target, my_module):
|
||||
# add the file to compile:
|
||||
my_module.add_src_file([
|
||||
'appl/debug.cpp',
|
||||
'appl/main.cpp',
|
||||
])
|
||||
|
||||
my_module.add_depend([
|
||||
'egami',
|
||||
])
|
||||
|
||||
#my_module.copy_file('data/icon.png','icon.png')
|
||||
|
||||
my_module.add_path(".")
|
||||
|
||||
return True
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user