mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-30 09:00:04 +00:00 
			
		
		
		
	Update level 3 color tables for 16-level products
This commit is contained in:
		
							parent
							
								
									2dcd87700c
								
							
						
					
					
						commit
						304297be9b
					
				
					 2 changed files with 38 additions and 27 deletions
				
			
		|  | @ -152,23 +152,26 @@ void Level3ProductView::UpdateColorTable() | |||
|    float    scale     = descriptionBlock->scale(); | ||||
|    uint16_t threshold = descriptionBlock->threshold(); | ||||
| 
 | ||||
|    // If the threshold is 2, the range min should be set to 1 for range folding
 | ||||
|    uint16_t rangeMin       = std::min<uint16_t>(1, threshold); | ||||
|    uint16_t numberOfLevels = descriptionBlock->number_of_levels(); | ||||
|    uint16_t rangeMax       = (numberOfLevels > 0) ? numberOfLevels - 1 : 0; | ||||
| 
 | ||||
|    if (p->savedColorTable_ == p->colorTable_ && //
 | ||||
|        p->savedOffset_ == offset &&             //
 | ||||
|        p->savedScale_ == scale) | ||||
|        p->savedScale_ == scale &&               //
 | ||||
|        numberOfLevels > 16) | ||||
|    { | ||||
|       // The color table LUT does not need updated
 | ||||
|       return; | ||||
|    } | ||||
| 
 | ||||
|    // If the threshold is 2, the range min should be set to 1 for range folding
 | ||||
|    uint16_t rangeMin = std::min<uint16_t>(1, threshold); | ||||
|    uint16_t rangeMax = descriptionBlock->number_of_levels(); | ||||
| 
 | ||||
|    // Iterate over [rangeMin, numberOfLevels)
 | ||||
|    boost::integer_range<uint16_t> dataRange = | ||||
|       boost::irange<uint16_t>(rangeMin, rangeMax + 1); | ||||
|       boost::irange<uint16_t>(rangeMin, numberOfLevels); | ||||
| 
 | ||||
|    std::vector<boost::gil::rgba8_pixel_t>& lut = p->colorTableLut_; | ||||
|    lut.resize(rangeMax - rangeMin + 1); | ||||
|    lut.resize(numberOfLevels - rangeMin); | ||||
|    lut.shrink_to_fit(); | ||||
| 
 | ||||
|    std::for_each(std::execution::par_unseq, | ||||
|  | @ -184,26 +187,34 @@ void Level3ProductView::UpdateColorTable() | |||
|                     { | ||||
|                        float f; | ||||
| 
 | ||||
|                        // Different products use different scale/offset formulas
 | ||||
|                        switch (descriptionBlock->product_code()) | ||||
|                        // Different products use different scale/offset
 | ||||
|                        // formulas
 | ||||
|                        if (numberOfLevels > 16) | ||||
|                        { | ||||
|                        case 159: | ||||
|                        case 161: | ||||
|                        case 163: | ||||
|                        case 167: | ||||
|                        case 168: | ||||
|                        case 170: | ||||
|                        case 172: | ||||
|                        case 173: | ||||
|                        case 174: | ||||
|                        case 175: | ||||
|                        case 176: | ||||
|                           f = (i - offset) / scale; | ||||
|                           break; | ||||
|                           switch (descriptionBlock->product_code()) | ||||
|                           { | ||||
|                           case 159: | ||||
|                           case 161: | ||||
|                           case 163: | ||||
|                           case 167: | ||||
|                           case 168: | ||||
|                           case 170: | ||||
|                           case 172: | ||||
|                           case 173: | ||||
|                           case 174: | ||||
|                           case 175: | ||||
|                           case 176: | ||||
|                              f = (i - offset) / scale; | ||||
|                              break; | ||||
| 
 | ||||
|                        default: | ||||
|                           f = i * scale + offset; | ||||
|                           break; | ||||
|                           default: | ||||
|                              f = i * scale + offset; | ||||
|                              break; | ||||
|                           } | ||||
|                        } | ||||
|                        else | ||||
|                        { | ||||
|                           f = descriptionBlock->data_level_threshold(i); | ||||
|                        } | ||||
| 
 | ||||
|                        lut[i - *dataRange.begin()] = p->colorTable_->Color(f); | ||||
|  |  | |||
|  | @ -528,11 +528,11 @@ uint16_t ProductDescriptionBlock::number_of_levels() const | |||
|       break; | ||||
| 
 | ||||
|    case 134: | ||||
|       numberOfLevels = 254; | ||||
|       numberOfLevels = 256; | ||||
|       break; | ||||
| 
 | ||||
|    case 135: | ||||
|       numberOfLevels = 199; | ||||
|       numberOfLevels = 200; | ||||
|       break; | ||||
| 
 | ||||
|    case 138: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat