⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagecnv.cpp

📁 这是一个用VC++开发的flashsource端的程序
💻 CPP
字号:
#include <fstream>
#include <sstream>
#include <hash_map>
#include <vector>

#include "fbutton.h"
#include "fbase.h"
#include "fshape.h"
#include "fdisplay.h"
#include "fcontrol.h"
#include "fsprite.h"
#include "fsound.h"
#include "flashmp3encoder.h"
#include "ffont.h"
#include "flashfontobj.h"
#include "fmorph.h"

#include "ftarga.h"
#include "fbitmap.h"

#include "FImport.h"
#include "Magick++/Magick++.h"

using namespace Magick; 

unsigned char GrayValue(float r, float g, float b)
{
	return (unsigned char)(0.299*r+0.587*g+0.114*b);
}

UWORD WriteImageFillLossless(char *fname, std::ostream &f, int &width, int &height, int fillId = 0)
{
	Image image(fname);
	width = image.baseColumns();
	height = image.baseRows();
	
	//Encode Image with 24 bit color
	int format = 5;
	
	unsigned char *imagedata = (unsigned char *)malloc(height*width*3);
	unsigned char *tgadata = (unsigned char *)malloc(height*width*4);

	image.write(0,0,width,height,"RGB",CharPixel,imagedata);	
	{
		for(UWORD y = 0; y < height; y++)
		{
			for(UWORD x = 0; x < width; x++)
			{
				UDWORD base = (y*width+x)*4;

				UDWORD base2 = (y*width+x)*3;
			
				unsigned char r = imagedata[base2];
				unsigned char g = imagedata[base2+1];
				unsigned char b = imagedata[base2+2];
				
				((unsigned char*)tgadata)[base+0]   =  0xff;
				((unsigned char*)tgadata)[base+1]   =  r;
				((unsigned char*)tgadata)[base+2]   =  g;
				((unsigned char*)tgadata)[base+3]   =  b;
				
			}
		}
	}
	FlashZLibBitmapData d((unsigned char *)tgadata,(width*height*4));
	FlashTagDefineBitsLossless2 db(format,width, height, d);
	if(fillId != 0)
	{
		db.SetID(fillId);
	}
	f << db;

	free (imagedata);
	free (tgadata);

	return db.GetID();
}
UWORD WriteImageFillLossless(char *fname, char *alpha_fname, std::ostream &f, int &width, int &height, int fillId = 0)
{
	Image image(fname);
	Image imageAlpha(alpha_fname);

	width = image.baseColumns();
	height = image.baseRows();
	
	//Encode Image with 24 bit color
	int format = 5;
	
	unsigned char *imagedata = (unsigned char *)malloc(height*width*3);
	unsigned char *tgadata = (unsigned char *)malloc(height*width*4);
	unsigned char *alphadata = (unsigned char *)malloc(height*width*3);

	image.write(0,0,width,height,"RGB",CharPixel,imagedata);
	imageAlpha.write(0,0,width,height,"RGB",CharPixel,alphadata);
	{
		for(UWORD y = 0; y < height; y++)
		{
			for(UWORD x = 0; x < width; x++)
			{
				
				UDWORD position = (y*width+x);
				UDWORD base = position*4;
				UDWORD base2 = position*3;
			
				unsigned char r = imagedata[base2];
				unsigned char g = imagedata[base2+1];
				unsigned char b = imagedata[base2+2];
			
				unsigned char rAlpha = alphadata[base2];
				unsigned char gAlpha = alphadata[base2+1];
				unsigned char bAlpha = alphadata[base2+2];
			
				((unsigned char*)tgadata)[base+0]   =  GrayValue(rAlpha, gAlpha, bAlpha);
				((unsigned char*)tgadata)[base+1]   =  r;
				((unsigned char*)tgadata)[base+2]   =  g;
				((unsigned char*)tgadata)[base+3]   =  b;
				
			}
		}
	}
	FlashZLibBitmapData d((unsigned char *)tgadata,(width*height*4));
	FlashTagDefineBitsLossless2 db(format,width, height, d);
	if(fillId != 0)
	{
		db.SetID(fillId);
	}
	f << db;

	free (imagedata);
	free (tgadata);

	return db.GetID();
}
UWORD WriteImageLossless(char *fname, std::ostream &f, int &width, int &height, int characterId = 0) 
{
	UWORD return_val = 0;
	try
	{
		UWORD fillId = 0;
		fillId = WriteImageFillLossless(fname, f, width, height, fillId);

		FlashMatrix m;
		m.SetScale(20,20);
		
		FlashShapeWithStyle s;
		FlashFillStyleArray ffa;
		FlashFillStyleBitmap sf(fillId,m); 

		ffa.AddFillStyle(&sf);
		s.SetFillStyleArray(ffa);
			
		FlashShapeRecordChange c(0,0);
		c.ChangeFillStyle1(1);
		s.AddRecord(c);
		s.AddRecord(FlashShapeRecordStraight(width*20, 0));
		s.AddRecord(FlashShapeRecordStraight(0, height*20));
		s.AddRecord(FlashShapeRecordStraight(-width*20, 0));
		s.AddRecord(FlashShapeRecordStraight(0, -height*20)); 
			
		
		FlashTagDefineShape3 ftds(s);
		if(characterId != 0)
		{
			ftds.SetID(characterId);
		}
		
		f << ftds;
		return_val =  ftds.GetID();
	}
	catch(Exception &error_)
	{
		std::cout << "Caught exception: " << error_.what() << "\n"; 
		throw (error_);
	}
	return return_val;
}

UWORD WriteImageFillJPEG(char *fname, std::ostream &f, int &width, int &height, int fillId = 0)
{
		Image image(fname);
		width = image.baseColumns();
		height = image.baseRows();
		
		Blob blob; 
		image.magick( "JPEG" ); // Set JPEG output format 
		image.write( &blob ); 
		
		unsigned char *data = (unsigned char*)malloc(blob.length());
		memcpy(data,blob.data(),blob.length());
		FlashTagDefineBitsJPEG2 db(data, blob.length());

		if(fillId != 0)
		{
			db.SetID(fillId);
		}

		f << db;
		free(data);

		return db.GetID();
}
UWORD WriteImageJPEG(char *fname, std::ostream &f, int &width, int &height, int characterId = 0) 
{
	UWORD return_val = 0;
	try
	{
		int fillId = WriteImageFillJPEG(fname, f, width, height, 0);

		FlashMatrix m;
		m.SetScale(20,20);
		
		FlashShapeWithStyle s;
		FlashFillStyleArray ffa;
		FlashFillStyleBitmap sf(fillId,m); 

		ffa.AddFillStyle(&sf);
		s.SetFillStyleArray(ffa);
			
		FlashShapeRecordChange c(0,0);
		c.ChangeFillStyle1(1);
		s.AddRecord(c);
		s.AddRecord(FlashShapeRecordStraight(width*20, 0));
		s.AddRecord(FlashShapeRecordStraight(0, height*20));
		s.AddRecord(FlashShapeRecordStraight(-width*20, 0));
		s.AddRecord(FlashShapeRecordStraight(0, -height*20)); 
			
		
		FlashTagDefineShape3 ftds(s);
		if(characterId != 0)
		{
			ftds.SetID(characterId);
		}
		f << ftds;
		return_val =  ftds.GetID();
	}
	catch(Exception &error_)
	{
		std::cout << "Caught exception: " << error_.what() << "\n"; 
		throw (error_);
	}
	return return_val;
}


UWORD WriteImageFillJPEG(char *fname, char *alpha_fname, std::ostream &f, int &width, int &height, int fillId = 0)
{
		Image image(fname);
		width = image.baseColumns();
		height = image.baseRows();
		
		Blob blob; 
		image.magick( "JPEG" ); // Set JPEG output format 
		image.write( &blob ); 
		
		unsigned char *data = (unsigned char*)malloc(blob.length());
		memcpy(data,blob.data(),blob.length());

		Image imageAlpha(alpha_fname);
		Blob blobAlpha;
		
		unsigned char *alphaData = (unsigned char *)malloc(height*width*3);
		unsigned char *outputAlphaData = (unsigned char *)malloc(height*width);

		imageAlpha.write(0,0,width,height,"RGB",CharPixel,alphaData);	
		{
			for(UWORD y = 0; y < height; y++)
			{
				for(UWORD x = 0; x < width; x++)
				{
					UDWORD base = (y*width+x)*3;
				
					unsigned char r = alphaData[base];
					unsigned char g = alphaData[base+1];
					unsigned char b = alphaData[base+2];
					
					outputAlphaData[x+(y*width)] = GrayValue(r, g, b);
				}
			}
		}

		FlashTagDefineBitsJPEG3 db(data, blob.length(), outputAlphaData, width*height);

		if(fillId != 0)
		{
			db.SetID(fillId);
		}

		f << db;
		free(data);
		free(outputAlphaData);
		free(alphaData);

		return db.GetID();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -