Create PackedPixel structure.
This commit is contained in:
		
							parent
							
								
									049228b377
								
							
						
					
					
						commit
						a6ef15ea62
					
				
					 1 changed files with 58 additions and 0 deletions
				
			
		
							
								
								
									
										58
									
								
								rotation.cpp
									
										
									
									
									
								
							
							
						
						
									
										58
									
								
								rotation.cpp
									
										
									
									
									
								
							|  | @ -39,6 +39,24 @@ std::basic_ostream<Elem, Traits>& operator << (std::basic_ostream<Elem, Traits>& | |||
|   return o; | ||||
| } | ||||
| 
 | ||||
| struct PackedPixel { | ||||
|   uint32_t r; | ||||
|   uint32_t g; | ||||
|   uint32_t b; | ||||
| 
 | ||||
|   PackedPixel() | ||||
|   : r(0) | ||||
|   , g(0) | ||||
|   , b(0) | ||||
|   {} | ||||
| }; | ||||
| 
 | ||||
| uint8_t interpolate_packed(uint32_t pack, double x, double x_inv, double y, double y_inv) | ||||
| { | ||||
|   return (((pack >> 24) & 0x000f) * x_inv + ((pack >> 16) & 0x000f) * x) * y_inv | ||||
|          + (((pack >> 8) & 0x000f) * x_inv + (pack & 0x000f) * x) * y; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| //
 | ||||
|  | @ -311,6 +329,31 @@ struct TiledImage : public Image { | |||
|     return tile + tile_j * tile_width + (tile_i * 3); | ||||
|   } | ||||
| 
 | ||||
|   PackedPixel | ||||
|   get_packed_pixels(unsigned int x, unsigned int y) const | ||||
|   { | ||||
|     PackedPixel pack; | ||||
| 
 | ||||
|     this->insert_pixel(pack, x, y); | ||||
|     pack.r = pack.r << 8; | ||||
|     pack.g = pack.g << 8; | ||||
|     pack.b = pack.b << 8; | ||||
| 
 | ||||
|     this->insert_pixel(pack, x + 1, y); | ||||
|     pack.r = pack.r << 8; | ||||
|     pack.g = pack.g << 8; | ||||
|     pack.b = pack.b << 8; | ||||
| 
 | ||||
|     this->insert_pixel(pack, x, y + 1); | ||||
|     pack.r = pack.r << 8; | ||||
|     pack.g = pack.g << 8; | ||||
|     pack.b = pack.b << 8; | ||||
| 
 | ||||
|     this->insert_pixel(pack, x + 1, y + 1); | ||||
| 
 | ||||
|     return pack; | ||||
|   } | ||||
| 
 | ||||
|   void | ||||
|   print_tile(unsigned int index) const | ||||
|   { | ||||
|  | @ -334,6 +377,21 @@ struct TiledImage : public Image { | |||
| 
 | ||||
| 
 | ||||
|   protected: | ||||
|     void insert_pixel(PackedPixel& pack, unsigned int x, unsigned int y) const | ||||
|     { | ||||
|       unsigned int const tile_width = tile_w * 3; | ||||
|       unsigned int const tile_index = (y / tile_h) * nb_col_tile + (x / tile_w); | ||||
|       if (tile_index >= nb_col_tile * nb_row_tile) | ||||
|         return; | ||||
|       uint8_t const* tile = tiles[tile_index]; | ||||
|       unsigned int const tile_j = y % tile_h; | ||||
|       unsigned int const tile_i = x % tile_w; | ||||
|       unsigned int index = tile_j * tile_width + (tile_i * 3); | ||||
|       pack.r += tile[index]; | ||||
|       pack.g += tile[index + 1] + 1; | ||||
|       pack.b += tile[index + 2] + 1; | ||||
|     } | ||||
| 
 | ||||
|     void allocate_memory(unsigned int w, unsigned int h) | ||||
|     { | ||||
|       width = w; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue