| #include "tenv.h" |
| #include "tsystem.h" |
| |
| #include "ino_common.h" |
| |
| |
| |
| namespace igs |
| { |
| namespace image |
| { |
| namespace rgba |
| { |
| enum num { blu = 0, |
| gre, |
| red, |
| alp, |
| siz }; |
| } |
| } |
| } |
| |
| namespace |
| { |
| |
| |
| template <class T, class U> |
| void ras_to_arr_( |
| const TRasterPT<T> ras, U *arr, const int channels) |
| { |
| using namespace igs::image::rgba; |
| |
| for (int yy = 0; yy < ras->getLy(); ++yy) { |
| const T *ras_sl = ras->pixels(yy); |
| for (int xx = 0; xx < ras->getLx(); ++xx, arr += channels) { |
| if (red < channels) { |
| arr[red] = ras_sl[xx].r; |
| } |
| if (gre < channels) { |
| arr[gre] = ras_sl[xx].g; |
| } |
| if (blu < channels) { |
| arr[blu] = ras_sl[xx].b; |
| } |
| if (alp < channels) { |
| arr[alp] = ras_sl[xx].m; |
| } |
| } |
| } |
| } |
| template <class U, class T> |
| void arr_to_ras_( |
| const U *arr, const int channels, TRasterPT<T> ras, const int margin |
| ) |
| { |
| arr += (ras->getLx() + margin + margin) * margin * channels + |
| margin * channels; |
| |
| using namespace igs::image::rgba; |
| |
| for (int yy = 0; yy < ras->getLy(); ++yy, arr += (ras->getLx() + margin + margin) * channels) { |
| const U *arrx = arr; |
| T *ras_sl = ras->pixels(yy); |
| for (int xx = 0; xx < ras->getLx(); ++xx, arrx += channels) { |
| if (red < channels) { |
| ras_sl[xx].r = arrx[red]; |
| } |
| if (gre < channels) { |
| ras_sl[xx].g = arrx[gre]; |
| } |
| if (blu < channels) { |
| ras_sl[xx].b = arrx[blu]; |
| } |
| if (alp < channels) { |
| ras_sl[xx].m = arrx[alp]; |
| } |
| } |
| } |
| } |
| } |
| |
| void ino::ras_to_arr( |
| const TRasterP in_ras, const int channels, unsigned char *out_arr) |
| { |
| if ((TRaster32P)in_ras) { |
| ras_to_arr_<TPixel32, unsigned char>( |
| in_ras, out_arr, channels); |
| } else if ((TRaster64P)in_ras) { |
| ras_to_arr_<TPixel64, unsigned short>( |
| in_ras, reinterpret_cast<unsigned short *>(out_arr), channels); |
| } |
| } |
| void ino::arr_to_ras( |
| const unsigned char *in_arr, const int channels, TRasterP out_ras, const int margin) |
| { |
| if ((TRaster32P)out_ras) { |
| arr_to_ras_<unsigned char, TPixel32>( |
| in_arr, channels, out_ras, margin); |
| } else if ((TRaster64P)out_ras) { |
| arr_to_ras_<unsigned short, TPixel64>( |
| reinterpret_cast<const unsigned short *>(in_arr), channels, out_ras, margin); |
| } |
| } |
| |
| void ino::ras_to_vec( |
| const TRasterP in_ras, const int channels, std::vector<unsigned char> &out_vec) |
| { |
| out_vec.resize( |
| in_ras->getLy() * in_ras->getLx() * channels * |
| (((TRaster64P)in_ras) ? sizeof(unsigned short) : sizeof(unsigned char))); |
| ino::ras_to_arr(in_ras, channels, &out_vec.at(0)); |
| } |
| void ino::vec_to_ras( |
| std::vector<unsigned char> &in_vec, const int channels, TRasterP out_ras, const int margin |
| ) |
| { |
| ino::arr_to_ras(&in_vec.at(0), channels, out_ras, margin); |
| in_vec.clear(); |
| } |
| |
| #if 0 //--- |
| void ino::Lx_to_wrap( TRasterP ras ) { |
| |
| |
| |
| |
| |
| |
| if ( ras->getWrap() <= ras->getLx() ) { return; } |
| |
| const int rowSize = ras->getLx() * ras->getPixelSize(); |
| const int wrapSize = ras->getWrap() * ras->getPixelSize(); |
| const int restSize = wrapSize - rowSize; |
| const UCHAR *rowImg = ras->getRawData()+rowSize *(ras->getLy()-1); |
| UCHAR *wrapImg = ras->getRawData()+wrapSize*(ras->getLy()-1); |
| for (int yy = 0; yy < ras->getLy(); ++yy) { |
| ::memcpy(wrapImg, rowImg, rowSize); |
| ::memset(wrapImg+rowSize, 0, restSize); |
| rowImg -= rowSize; |
| wrapImg -= wrapSize; |
| } |
| } |
| #endif //--- |
| |
| |
| namespace |
| { |
| bool enable_sw_ = true; |
| bool check_sw_ = true; |
| } |
| bool ino::log_enable_sw(void) |
| { |
| if (check_sw_) { |
| TFileStatus file( |
| |
| TEnv::getConfigDir() + "fx_ino_no_log.setup"); |
| if (file.doesExist()) { |
| enable_sw_ = false; |
| } |
| |
| check_sw_ = false; |
| } |
| return enable_sw_; |
| } |