Пример #1
0
/******************************************************************************
 Close output file (if open), and exit.
******************************************************************************/
static void RGB2GIF(bool OneFileFlag, int NumFiles, char *FileName,
            int ExpNumOfColors, int Width, int Height)
{
    int ColorMapSize;

    GifByteType *RedBuffer = NULL, *GreenBuffer = NULL, *BlueBuffer = NULL,
    *OutputBuffer = NULL;
    ColorMapObject *OutputColorMap = NULL;

    ColorMapSize = 1 << ExpNumOfColors;

    if (NumFiles == 1) {
    LoadRGB(FileName, OneFileFlag,
        &RedBuffer, &GreenBuffer, &BlueBuffer, Width, Height);
    }
    else {
    LoadRGB(NULL, OneFileFlag,
        &RedBuffer, &GreenBuffer, &BlueBuffer, Width, Height);
    }

    if ((OutputColorMap = GifMakeMapObject(ColorMapSize, NULL)) == NULL ||
    (OutputBuffer = (GifByteType *) malloc(Width * Height *
                        sizeof(GifByteType))) == NULL)
    GIF_EXIT("Failed to allocate memory required, aborted.");

    if (GifQuantizeBuffer(Width, Height, &ColorMapSize,
               RedBuffer, GreenBuffer, BlueBuffer,
               OutputBuffer, OutputColorMap->Colors) == GIF_ERROR)
    exit(EXIT_FAILURE);
    free((char *) RedBuffer);
    free((char *) GreenBuffer);
    free((char *) BlueBuffer);

    SaveGif(OutputBuffer, Width, Height, ExpNumOfColors, OutputColorMap);
}
Пример #2
0
/*======================================================================
    Function:    SetupTransition
    Input:       pointer to start of RGB sequence
	             pointer to (R,G,B) target tuple
    Output:      pointer to next (R,G,B) target tuple
    Description: Set up transition from current color to target color.
	             If target == NULL the (R,G,B) tuple of the sequence start is loaded.
    Tested:      no
  ======================================================================*/
rgbt_t* SetupTransition(rgbt_t* seq, rgbt_t* target)
{
	uint8_t t;
	
	if (target == NULL) {
		LoadRGB(pwm, seq);						// load sequence start values
		target = seq;		
	}
	else {
		LoadRGB(pwm_target, target);			// load transition target
		interpolatorSetup(pwm, pwm_target);
		t = GetTransTime(target);
		trans_time  = t;
		trans_timer = t;						// start transition timer
	}

	target++;								// next tuple
	t = GetTransTime(target);
	if (t == 0) {							// end of sequence?
		target = seq;						// -> then start from begin of sequence
	}
	return(target);
}
Пример #3
0
	//==========================================
	// 関数 : LoadBMPFromFilePointer
	// 目的 : 受け取ったファイルポインタが示すBMPファイルのロード
	// 戻り値: TImageInfo *	※読み込みに失敗した場合はNULLを返す
	// 引数 : FILE * pf	ファイルポインタ
	//==========================================
	TImageInfo * LoadBMPFromFilePointer(FILE * pf)
	{
		TImageInfo * pBmp;				// BMP用構造体のポインタ
		int nWidth;						// 横幅情報受け取り用
		int nHeight;					// 縦幅情報受け取り用
		unsigned short wBitCount;		// ビット数情報受け取り用
		unsigned long dwCompression;	// 圧縮情報受け取り用
		bool nResult;					// 処理結果受け取り用

		nResult = LoadHeader(pf);
		if (nResult == false) return NULL;		// ファイルヘッダ部の読み込みに失敗した場合、処理を終了して関数から脱出する

		// 情報ヘッダ部の読み込みを行い、横幅・縦幅・ビット数・圧縮情報 のデータを受け取る
		nResult = LoadInfo(pf, &nWidth, &nHeight, &wBitCount, &dwCompression);

		if (nResult == false) return NULL;		// 情報ヘッダ部の読み込みに失敗した場合、処理を終了して関数から脱出する

		pBmp = (TImageInfo *)malloc(sizeof(TImageInfo));	// TImageInfo型変数を動的確保する
		pBmp->nWidth = nWidth;							// 先ほど取得した横幅情報を代入する
		pBmp->nHeight = nHeight;						// 先ほど取得した縦幅情報を代入する
		pBmp->pbyPixels = NULL;							// ピクセル情報を入れるポインタはNULLで初期化しておく

		if (wBitCount != 24)	// 24bit形式でなかった場合
		{
			pBmp->bEffective = false;	// 対応できない形式であるため、フラグを折って関数から脱出する
			return pBmp;
		}
		if (dwCompression != 0)	// 圧縮されている場合
		{
			pBmp->bEffective = false;	// 対応できない形式であるため、フラグを折って関数から脱出する
			return pBmp;
		}
		pBmp->bEffective = true;	// 以上の条件をクリアしたということは対応できる形式であるため、フラグを立てておく

		pBmp->pbyPixels = LoadRGB(pf, pBmp->nWidth, pBmp->nHeight);	// RGB情報を読み込む

		if (pBmp->pbyPixels == NULL)	// RGB情報の読み込みに失敗した場合
		{
			free(pBmp);				// TImageInfo用に確保したメモリを解放する
			return NULL;
		}

		return pBmp;
	}