void Film::generateImgVector(vector<unsigned char> & image) { int length = width * height * 4; int r, c; int i; for ( r = 0 ; r < height; r ++) { for (c = 0; c < width; c++) { i = r * width * 4 + c * 4; Color cur_color(getColorAt(r,c)); image.at(i) = colorFloat2Byte(cur_color(0)); //r image.at(i+1) = colorFloat2Byte(cur_color(1)); //g image.at(i+2) = colorFloat2Byte(cur_color(2)); //b image.at(i+3) = 255; //a } } }
Color Film::getColorAt(int row, int column) { //test: one sample for one pixel //return colorFloat2Byte( (image_bucket.at(row).at(column))(i) ); vector<Color>& bucket = image_bucket.at(row).at(column); Color cur_color(0,0,0); vector<Color>::iterator iter; for(iter = bucket.begin(); iter!= bucket.end() ;++iter) { cur_color += (*iter); } cur_color /= (float)(bucket.size()); return cur_color; }
BOOL LLKeywords::loadFromFile( const std::string& filename ) { mLoaded = FALSE; //////////////////////////////////////////////////////////// // File header const S32 BUFFER_SIZE = 1024; char buffer[BUFFER_SIZE]; /* Flawfinder: ignore */ llifstream file; file.open(filename); /* Flawfinder: ignore */ if( file.fail() ) { llinfos << "LLKeywords::loadFromFile() Unable to open file: " << filename << llendl; return mLoaded; } // Identifying string file >> buffer; if( strcmp( buffer, "llkeywords" ) ) { llinfos << filename << " does not appear to be a keyword file" << llendl; return mLoaded; } // Check file version file >> buffer; U32 version_num; file >> version_num; if( strcmp(buffer, "version") || version_num != (U32)KEYWORD_FILE_CURRENT_VERSION ) { llinfos << filename << " does not appear to be a version " << KEYWORD_FILE_CURRENT_VERSION << " keyword file" << llendl; return mLoaded; } // start of line (SOL) std::string SOL_COMMENT("#"); std::string SOL_WORD("[word "); std::string SOL_LINE("[line "); std::string SOL_ONE_SIDED_DELIMITER("[one_sided_delimiter "); std::string SOL_TWO_SIDED_DELIMITER("[two_sided_delimiter "); LLColor3 cur_color( 1, 0, 0 ); LLKeywordToken::TOKEN_TYPE cur_type = LLKeywordToken::WORD; while (!file.eof()) { buffer[0] = 0; file.getline( buffer, BUFFER_SIZE ); std::string line(buffer); if( line.find(SOL_COMMENT) == 0 ) { continue; } else if( line.find(SOL_WORD) == 0 ) { cur_color = readColor( line.substr(SOL_WORD.size()) ); cur_type = LLKeywordToken::WORD; continue; } else if( line.find(SOL_LINE) == 0 ) { cur_color = readColor( line.substr(SOL_LINE.size()) ); cur_type = LLKeywordToken::LINE; continue; } else if( line.find(SOL_TWO_SIDED_DELIMITER) == 0 ) { cur_color = readColor( line.substr(SOL_TWO_SIDED_DELIMITER.size()) ); cur_type = LLKeywordToken::TWO_SIDED_DELIMITER; continue; } else if( line.find(SOL_ONE_SIDED_DELIMITER) == 0 ) { cur_color = readColor( line.substr(SOL_ONE_SIDED_DELIMITER.size()) ); cur_type = LLKeywordToken::ONE_SIDED_DELIMITER; continue; } std::string token_buffer( line ); LLStringUtil::trim(token_buffer); typedef boost::tokenizer<boost::char_separator<char> > tokenizer; boost::char_separator<char> sep_word("", " \t"); tokenizer word_tokens(token_buffer, sep_word); tokenizer::iterator token_word_iter = word_tokens.begin(); if( !token_buffer.empty() && token_word_iter != word_tokens.end() ) { // first word is keyword std::string keyword = (*token_word_iter); LLStringUtil::trim(keyword); // following words are tooltip std::string tool_tip; while (++token_word_iter != word_tokens.end()) { tool_tip += (*token_word_iter); } LLStringUtil::trim(tool_tip); if( !tool_tip.empty() ) { // Replace : with \n for multi-line tool tips. LLStringUtil::replaceChar( tool_tip, ':', '\n' ); addToken(cur_type, keyword, cur_color, tool_tip ); } else { addToken(cur_type, keyword, cur_color, LLStringUtil::null ); } } } file.close(); mLoaded = TRUE; return mLoaded; }