// ClearRGBA() // Clear the buffer to the given color. The inputs default to 0 // (black, solid alpha, closest palette match). // Mode Effect // RGB all pixels become r,g,b // RGBA all pixels become r,g,b; Alpha becomes a // GREY all pixels become the value of r,g,b // INDEXED all pixels become the closest palette match to r,g,b void ImageClass::ClearRGBA( IMG_BYTE r, IMG_BYTE g, IMG_BYTE b, IMG_BYTE a ) { unsigned long i; unsigned long num_bytes = (width * height * pixel_size); switch( type ) { case IMAGE_INDEXED: ClearIndexed( FindPaletteIndex( r, g, b ) ); break; case IMAGE_RGB: ClearRGB( r, g, b ); break; case IMAGE_RGBA: IMG_BYTE * pixel; for( i=0; i < num_bytes; i += pixel_size ) { pixel = &(image[i]); pixel[0] = r; pixel[1] = g; pixel[2] = b; pixel[3] = a; } break; case IMAGE_GREY: ClearGrey( GetValueOfRGB( r, g, b ) ); break; } }
// Clear() // Clear the buffer to the given color. The inputs default to 0 // (black, solid alpha, closest palette match). // Mode Effect // RGB all pixels become r,g,b // RGBA all pixels become r,g,b; Alpha becomes a // GREY all pixels become the value of r,g,b // INDEXED all pixels become the closest palette match to r,g,b void ImageClass::Clear( IMG_BYTE r, IMG_BYTE g, IMG_BYTE b, IMG_BYTE a ) { switch( type ) { case IMAGE_INDEXED: ClearIndexed( FindPaletteIndex( r, g, b ) ); break; case IMAGE_RGB: ClearRGB( r, g, b ); break; case IMAGE_RGBA: ClearRGBA( r, g, b, a ); break; case IMAGE_GREY: ClearGrey( ImageClass::GetValueOfRGB( r, g, b ) ); break; } }
// ClearGrey() // Clears the alpha to the given value. Defaults to 0 // (black, or the closest palette index) // Mode Effect // RGB clears buffer to value // RGBA clears buffer to value; Alpha is untouched // GREY clears buffer to value // INDEXED clears buffer to closest match to value void ImageClass::ClearGrey( IMG_BYTE value ) { unsigned long i; unsigned long num_bytes = (width * height * pixel_size); switch( type ) { case IMAGE_INDEXED: ClearIndexed( FindPaletteIndex( value, value, value ) ); break; case IMAGE_RGB: case IMAGE_RGBA: ClearRGB( value, value, value ); break; case IMAGE_GREY: for( i=0; i < num_bytes; i += pixel_size ) image[i] = value; break; } }
// Constructor // Simple constructor. Nothing is initialized until the Init() // function is called later on. ImageClass::ImageClass( int _w, int _h, int _type, unsigned int _num_registers ) : width(_w), height(_h), type(_type), error(IMAGE_NO_ERROR), pixel_size(0), zero_zero(IMAGE_TOPLEFT), num_registers(0), palette(NULL), image(NULL) { // Setup the image's stuff switch( type ) { case IMAGE_INDEXED: // Palettized Image num_registers = _num_registers; if( num_registers < 1 ) { error = IMAGE_NOT_ENOUGH_REGISTERS; return; } palette = new IMG_BYTE[ num_registers * sizeof(IMG_BYTE) * 3 ]; pixel_size = 1; break; case IMAGE_GREY: // 8-bit Greyscale Image pixel_size = 1; break; case IMAGE_RGB: // 24-bit RGB Color Image pixel_size = 3; break; case IMAGE_RGBA: // 24-bit RGB Color Image with 8-bit Alpha Channel pixel_size = 4; break; default: // Invalid Image Type error = IMAGE_INVALID_TYPE; return; } image = new IMG_BYTE[ width * height * sizeof(IMG_BYTE) * pixel_size ]; if( image == NULL ) { error = IMAGE_OUT_OF_RAM; return; } // Clear the image out to black (or index 0) switch( type ) { case IMAGE_INDEXED: ClearIndexed( 0 ); break; case IMAGE_GREY: ClearGrey( 0 ); break; case IMAGE_RGB: ClearRGB( 0, 0, 0 ); break; case IMAGE_RGBA: ClearRGBA( 0, 0, 0, 0 ); break; } }
void KeyHandle(void) { switch(NEC[2]) { case 0x0c: Cube_MODE = 1; //dft ClearALL(); TIM_Cmd(TIM3,DISABLE); TIM_Cmd(TIM3,DISABLE); TIM_Cmd(TIM4,ENABLE); TIM_Cmd(TIM4,ENABLE); break; case 0x18: Cube_MODE = 2; //Æôanimation SpeedSum = 0; NumCount = 0; pictrue_order = 0; ClearALL(); TIM_Cmd(TIM3,ENABLE); TIM_Cmd(TIM3,ENABLE); TIM_Cmd(TIM4,DISABLE); TIM_Cmd(TIM4,DISABLE); break; case 0x5e: Cube_MODE = 3; TIM_Cmd(TIM3,DISABLE); TIM_Cmd(TIM3,DISABLE); TIM_Cmd(TIM4,DISABLE); TIM_Cmd(TIM4,DISABLE); ClearALL(); ClearRGB(0,1); light_red = 1; light_green = 0; light_blue = 0; break; case 0x08: if(3 == Cube_MODE) { if(light_red < 15) light_red++; ClearRGB(0,light_red); } break; case 0x1c: if(3 == Cube_MODE) { if(light_green < 15) light_green++; ClearRGB(1,light_green); } else if(4 == Cube_MODE) { Add_X = 0; Add_Y = 0; Add_Z = -1; } break; case 0x5a: if(3 == Cube_MODE) { if(light_blue < 15) light_blue++; ClearRGB(2,light_blue); } break; case 0x42: if(3 == Cube_MODE) { if(light_red > 0) light_red--; ClearRGB(0,light_red); } break; case 0x52: if(3 == Cube_MODE) { if(light_green > 0) light_green--; ClearRGB(1,light_green); } else if(4 == Cube_MODE) { Add_X = 0; Add_Y = 0; Add_Z = 1; } break; case 0x4a: if(3 == Cube_MODE) { if(light_blue > 0) light_blue--; ClearRGB(2,light_blue); } break; case 0x16: Cube_MODE = 0; W25QxxAddress = 0; NowSection = 0; ClearALL(); TIM_Cmd(TIM3,ENABLE); TIM_Cmd(TIM3,ENABLE); TIM_Cmd(TIM4,DISABLE); TIM_Cmd(TIM4,DISABLE); break; case 0x19: if(4 == Cube_MODE) { Add_X = 0; Add_Y = -1; Add_Z = 0; } break; case 0x0d: Cube_MODE = 4; SpeedSum = 0; NumCount = 0; ClearALL(); TIM_Cmd(TIM3,ENABLE); TIM_Cmd(TIM3,ENABLE); TIM_Cmd(TIM4,DISABLE); TIM_Cmd(TIM4,DISABLE); Snake_Start(); Snake_Above(); Snake_Show(10,1,0,0,10,0); break; case 0x07: if(4 == Cube_MODE) { Add_X = -1; Add_Y = 0; Add_Z = 0; } break; case 0x15: break; case 0x09: if(4 == Cube_MODE) { Add_X = 1; Add_Y = 0; Add_Z = 0; } break; case 0x44: break; case 0x40: if(4 == Cube_MODE) { Add_X = 0; Add_Y = 1; Add_Z = 0; } break; case 0x43: break; case 0x45: break; case 0x47: break; default: break; } }