📄 imagecnv.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 + -