예제 #1
0
파일: videolib.c 프로젝트: fniephaus/squeak
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;
}
예제 #2
0
파일: videolib.c 프로젝트: fniephaus/squeak
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;
   }
}
예제 #3
0
파일: img.cpp 프로젝트: JonnyH/ktftd
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;
	}
}
예제 #4
0
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();
    }
  }
}