![]() |
Была надобность написать такой класс, для того, что бы можно было сразу все файлы в директории конвертировать в ICO, BMP.
C++: [CODE] #pragma pack(push, 2) struct BitmapFileHeader { uint16_t type ; uint32_t size ; uint16_t reserved1 ; uint16_t reserved2 ; uint32_t offset ; } ; struct BitmapInfoHeader { uint32_t size ; int32_t width ; int32_t height ; uint16_t planes ; uint16_t bitCount ; uint32_t compression ; uint32_t sizeImage ; int32_t xPelsPerMeter ; int32_t yPelsPerMeter ; uint32_t clrUsed ; uint32_t clrImportant ; } ; struct IconHeader { uint16_t reserved ; uint16_t type ; uint16_t count ; } ; struct IconDirectoryEntry { uint8_t width ; uint8_t height ; uint8_t colorCount ; uint8_t reserved ; uint16_t planes ; uint16_t bitCount ; uint32_t sizeInBytes ; uint32_t offset ; } ; static const char ppm_header [ ] = "P6\n32 32\n255\n" ; // P6 - формаит PPM, 32 32 - размер, 255 цветовой компонент от 0 до 255 #pragma pack(pop) class ImageConverter { public : void ConvertPNGtoBMP ( const std :: string & inputFileName , const std :: string & outputFileName ) { std :: ifstream inputFile ( inputFileName , std :: ios :: binary ) ; if ( ! inputFile ) { std :: cerr ( & fileHeader ) , sizeof ( fileHeader ) ) ; outputFile . write ( reinterpret_cast ( & infoHeader ) , sizeof ( infoHeader ) ) ; std :: vector imageData ( 32 * 32 * 3 , 0 ) ; outputFile . write ( reinterpret_cast ( imageData . data ( ) ) , imageData . size ( ) ) ; } void ConvertPNGtoPPM ( const std :: string & inputFileName , const std :: string & outputFileName ) { std :: ifstream inputFile ( inputFileName , std :: ios :: binary ) ; if ( ! inputFile ) { std :: cerr imageData ( ( std :: istreambuf_iterator ( inputFile ) ) , std :: istreambuf_iterator ( ) ) ; std :: ofstream outputFile ( outputFileName , std :: ios :: binary ) ; if ( ! outputFile ) { std :: cerr ( imageData . data ( ) ) , imageData . size ( ) ) ; if ( ! outputFile ) { std :: cerr imageData ( ( std :: istreambuf_iterator ( inputFile ) ) , std :: istreambuf_iterator ( ) ) ; IconHeader iconHeader = { 0 , 1 , 1 } ; IconDirectoryEntry directoryEntry = { 32 , 32 , 0 , 0 , 1 , 32 , static_cast ( imageData . size ( ) ) , 22 } ; std :: ofstream outputFile ( outputFileName , std :: ios :: binary ) ; if ( ! outputFile ) { std :: cerr ( & iconHeader ) , sizeof ( iconHeader ) ) ; outputFile . write ( reinterpret_cast ( & directoryEntry ) , sizeof ( directoryEntry ) ) ; outputFile . write ( reinterpret_cast ( imageData . data ( ) ) , imageData . size ( ) ) ; if ( ! outputFile ) { std :: cerr Структуры спизжены с Polychaos если что пример использования |
| Время: 16:14 |