BOOLEAN rawSetupPalette(Device device) { if (device->desiredPalette && (device->vpicture.palette != device->desiredPalette)) { fprintf(stdout, " - Changing the palette from %d (%s) to %d (%s) and depth from %d to %d\n", device->vpicture.palette, paletteName(device->vpicture.palette), device->desiredPalette, paletteName(device->desiredPalette), device->vpicture.depth, paletteDepth(device->desiredPalette)); device->vpicture.palette = device->desiredPalette; device->vpicture.depth = paletteDepth(device->desiredPalette); if (EINTR_RETRY(xioctl(device->fd, VIDIOCSPICT, &device->vpicture)) < 0) { perror("VIDIOCSPICT"); return FALSE; } if (paletteDepth(device->desiredPalette) != device->vpicture.depth) { fprintf(stdout, " * The device can't change the depth\n"); return FALSE; } if (device->desiredPalette != device->vpicture.palette) { fprintf(stdout, " * The device can't change the palette\n"); return FALSE; } } fprintf(stdout, " - Depth=%d Palette=%d (%s)\n", device->vpicture.depth, device->vpicture.palette, paletteName(device->vpicture.palette)); return TRUE; }
Device createDevice(int deviceID, int width, int height, int palette) { char deviceName[DEVICE_NAME_SIZE]; strcpy(deviceName, videoDeviceBaseName); deviceName[DEVICE_NAME_SIZE - 2] = deviceID + '0'; Device device; fprintf(stdout, "- Creating Device: id=%d, deviceName=%s, extent=%d@%d, palette=%d-%s\n", deviceID, deviceName, width, height, palette, paletteName(palette)); device = (Device) malloc(SIZE_OF_DEVICE); if (device == 0) { fprintf(stdout, " * Not enough memory\n"); return 0; } fprintf(stdout, " - Structure created in %p\n", device); initDevice(device, deviceName, width, height, palette); if (openDevice(device)) { return device; } else { closeDevice(device); return 0; } }
int main(int argc, char **argv) { if (argc <= 2) { printUsage(); return EXIT_SUCCESS; } std::string fileName(argv[2]); std::string outputFileName = fileName.substr(0, fileName.length()-4); outputFileName.append(".png"); if (argv[1][0] == 'f') { if (argc <= 5) { printUsage(); return EXIT_SUCCESS; } std::ifstream inFile(fileName); ktftd::img::FontSize size; switch (argv[3][0]) { case 's': size = ktftd::img::FONTSIZE_SMALL; break; case 'b': size = ktftd::img::FONTSIZE_BIG; break; default: printUsage(); return EXIT_FAILURE; } auto font = ktftd::img::LoadFont(inFile, size); std::string paletteName(argv[4]); int paletteOffset = atoi(argv[5]); std::ifstream paletteFile(paletteName); auto palette = ktftd::img::LoadPalette(paletteFile, paletteOffset); for (unsigned int c = font.startASCII; c < font.endASCII; c++) { std::stringstream ss; ss << "char" << std::setw(3) << std::setfill('0') << c << ".png"; auto outputImage = font.characterImages[c-font.startASCII].getImage(palette); outputImage.writePNG(ss.str().c_str()); } } else if (argv[1][0] == 'i') { if (argc <= 2) { printUsage(); return EXIT_SUCCESS; } auto spk = fileName.rfind(".SPK"); auto bdy = fileName.rfind(".BDY"); auto scr = fileName.rfind(".SCR"); auto dat = fileName.rfind(".DAT"); auto lbm = fileName.rfind(".LBM"); bool requiresPalette; ktftd::img::Palette palette; ktftd::img::PaletteImage palettedImage; ktftd::img::Image outputImage; std::ifstream inFile(fileName); if (spk == fileName.length()-4) { std::cout << "Is SPK File\n"; requiresPalette = true; palettedImage = ktftd::img::LoadSPKImage(inFile); } else if (bdy == fileName.length()-4) { std::cout << "Is BDY file\n"; requiresPalette = true; palettedImage = ktftd::img::LoadBDYImage(inFile); } else if(scr == fileName.length()-4) { std::cout << "Is SCR file\n"; requiresPalette = true; palettedImage = ktftd::img::LoadSCRImage(inFile); } else if(dat == fileName.length()-4) { std::cout << "Is DAT file\n"; requiresPalette = true; //DAT files are the same as SCR palettedImage = ktftd::img::LoadSCRImage(inFile); } else if(lbm == fileName.length() - 4) { std::cout << "Is LBM file\n"; requiresPalette = false; auto lbmFile = ktftd::img::LoadLBMImage(inFile); assert(lbmFile.palette); assert(lbmFile.image); outputImage = lbmFile.image->getImage(*lbmFile.palette); } else { std::cerr << "Unknown file type: \"" << fileName << "\"\n"; printUsage(); return EXIT_FAILURE; } if (requiresPalette) { if (argc <= 3) { printUsage(); return EXIT_FAILURE; } std::string paletteName (argv[3]); auto dat = paletteName.rfind(".DAT"); auto lbm = paletteName.rfind(".LBM"); if (dat == paletteName.length() - 4) { std::cout << "Is dat palette\n"; if (argc != 5) { printUsage(); return EXIT_FAILURE; } else { int paletteOffset = atoi(argv[4]); std::ifstream paletteFile(paletteName); palette = ktftd::img::LoadPalette(paletteFile, paletteOffset); } } else if(lbm == paletteName.length()-4) { std::cout << "Is lbm palette\n"; std::ifstream paletteFile(paletteName); auto lbmImage = ktftd::img::LoadLBMImage(paletteFile); palette = *lbmImage.palette; } else { std::cerr << "Unknown palette type: \"" << paletteName << "\"\n"; printUsage(); return EXIT_FAILURE; } outputImage = palettedImage.getImage(palette); } outputImage.writePNG(outputFileName.c_str()); } else if (argv[1][0] == 'p') { if (argc < 3) { printUsage(); return EXIT_FAILURE; } std::string paletteName(argv[2]); ktftd::img::Palette palette; if (paletteName.rfind(".LBM") == paletteName.length()-4) { std::ifstream paletteFile(paletteName); auto lbmImage = ktftd::img::LoadLBMImage(paletteFile); palette = *lbmImage.palette; } else if (paletteName.rfind(".DAT") == paletteName.length()-4) { if (argc != 4) { printUsage(); return EXIT_FAILURE; } std::ifstream inFile(argv[2]); int paletteOffset = atoi(argv[3]); palette = ktftd::img::LoadPalette(inFile, paletteOffset); } else { std::cerr << "Unknown palette file type\n"; printUsage(); return EXIT_FAILURE; } auto image = palette.toImage(); image.writePNG(outputFileName.c_str()); } else { printUsage(); return EXIT_FAILURE; } }
void KPaletteTable::setPalette( const TQString &_paletteName ) { TQString paletteName( _paletteName); if (paletteName.isEmpty()) paletteName = i18n_recentColors; if (combo->currentText() != paletteName) { bool found = false; for(int i = 0; i < combo->count(); i++) { if (combo->text(i) == paletteName) { combo->setCurrentItem(i); found = true; break; } } if (!found) { combo->insertItem(paletteName); combo->setCurrentItem(combo->count()-1); } } // We must again find the file name of the palette from the eventual translation for ( int i = 0; colorPaletteName[i].m_fileName; ++i ) { if ( paletteName == i18n( "palette name", colorPaletteName[i].m_displayName ) ) { paletteName = colorPaletteName[i].m_fileName; break; } } // // 2000-02-12 Espen Sand // The palette mode "i18n_namedColors" does not use the KPalette class. // In fact, 'mPalette' and 'cells' are 0 when in this mode. The reason // for this is maninly that KPalette reads from and writes to files using // "locate()". The colors used in "i18n_namedColors" mode comes from the // X11 diretory and is not writable. I don't think this fit in KPalette. // if( !mPalette || mPalette->name() != paletteName ) { if( paletteName == i18n_namedColors ) { sv->hide(); mNamedColorList->show(); readNamedColor(); delete cells; cells = 0; delete mPalette; mPalette = 0; } else { mNamedColorList->hide(); sv->show(); delete cells; delete mPalette; mPalette = new KPalette(paletteName); int rows = (mPalette->nrColors()+mCols-1) / mCols; if (rows < 1) rows = 1; cells = new KColorCells( sv->viewport(), rows, mCols); cells->setShading(false); cells->setAcceptDrags(false); TQSize cellSize = TQSize( mMinWidth, mMinWidth * rows / mCols); cells->setFixedSize( cellSize ); for( int i = 0; i < mPalette->nrColors(); i++) { cells->setColor( i, mPalette->color(i) ); } connect( cells, TQT_SIGNAL( colorSelected( int ) ), TQT_SLOT( slotColorCellSelected( int ) ) ); connect( cells, TQT_SIGNAL( colorDoubleClicked( int ) ), TQT_SLOT( slotColorCellDoubleClicked( int ) ) ); sv->addChild( cells ); cells->show(); sv->updateScrollBars(); } } }