`
seara
  • 浏览: 648498 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

手机电子书UMD数据格式实现代码(C#版)

阅读更多

原文地址:http://blog.joycode.com/uestc95/archive/2008/06/19/115155.aspx

UMD格式是国内手机阅读中使用较多的一种格式,但其公司却并没有将UMD数据格式公开,但是却用另外一种方式将其公开,你去访问一下他们的站点然后下载他的制作工具就知道。

下面的是文本的UMD相关处理代码,图形的下一篇post出来

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->namespaceIkari
{
usingICSharpCode.SharpZipLib.Zip.Compression;
usingSystem;
usingSystem.Collections;
usingSystem.IO;
usingSystem.Reflection;
usingSystem.Runtime.InteropServices;
usingSystem.Text;
usingSystem.Windows.Forms;

publicclassUMD_GENEGINE
{
privateconstintA_32K_BYTE=0x8000;
privatebyteACTUAL_WIDTH_S60_HORI=0xcc;
privatebyteACTUAL_WIDTH_S60_VERT=0xac;
privatebyteACTUAL_WIDTH_SP=0xa6;
privateconstuintBASE_REFN_CHAP_OFF=0x3000;
privateconstuintBASE_REFN_CHAP_STR=0x4000;
privateconstuintBASE_REFN_CONTENT=0x2000;
privateconstuintBASE_REFN_COVER=0x1000;
privateconstuintBASE_REFN_PAGE_OFFSET=0x7000;
privateconststringBEYOND_END_FLAG="\0";
privateconstintBYTE_LEN=1;
privateconstbyteCOVER_TYPE_BMP=0;
privateconstbyteCOVER_TYPE_GIF=2;
privateconstbyteCOVER_TYPE_JPG=1;
privateconstintCURR_VERSION=1;
privateconstshortDCTS_CMD_ID_AUTHOR=3;
privateconstshortDCTS_CMD_ID_CDS_KEY=240;
privateconstshortDCTS_CMD_ID_CHAP_OFF=0x83;
privateconstshortDCTS_CMD_ID_CHAP_STR=0x84;
privateconstshortDCTS_CMD_ID_CONTENT_ID=10;
privateconstshortDCTS_CMD_ID_COVER_PAGE=130;
privateconstshortDCTS_CMD_ID_DAY=6;
privateconstshortDCTS_CMD_ID_FILE_LENGTH=11;
privateconstshortDCTS_CMD_ID_FIXED_LEN=12;
privateconstshortDCTS_CMD_ID_GENDER=7;
privateconstshortDCTS_CMD_ID_LICENSE_KEY=0xf1;
privateconstshortDCTS_CMD_ID_MONTH=5;
privateconstshortDCTS_CMD_ID_PAGE_OFFSET=0x87;
privateconstshortDCTS_CMD_ID_PUBLISHER=8;
privateconstshortDCTS_CMD_ID_REF_CONTENT=0x81;
privateconstshortDCTS_CMD_ID_TITLE=2;
privateconstshortDCTS_CMD_ID_VENDOR=9;
privateconstshortDCTS_CMD_ID_VERSION=1;
privateconstshortDCTS_CMD_ID_YEAR=4;
privateconstbyteFIXED_LINE_PER_PAGE_S60=50;
privateconstbyteFIXED_LINE_PER_PAGE_SP=0x19;
privatestringiAuthor;
privatebyte[]ibContent;
privateint[]iChapOff;
privateArrayListiChapStr=newArrayList();
privateArrayListiChapter=newArrayList();
privateintiCID;
privatestringiContent;
privatestringiCoverFile;
privatestringiDay;
privatestringiGender;
privatestringiMonth;
privateconstintINT_LEN=4;
privateshortiPGKSeed=0;
privatestringiPublisher;
privatestringiSaveTo;
privatestringiTitle;
privateintiTotalen;
privatestringiVendor;
privateArrayListiWidthData_S60=newArrayList();
privateArrayListiWidthData_SP=newArrayList();
privatestringiYear;
privatebyte[][]iZippedSeg;
privateconststringKEY_CODE_TAB="\t";
privateconstbyteS60_FONT_SIZE_BIG=0x10;
privateconstbyteS60_FONT_SIZE_SMALL=12;
privateconstbyteSEREIS60_FONTS_COUNT=2;
privateconstintSHORT_LEN=2;
privateconstbyteSP_FONT_SIZE_10=10;
privateconstbyteSP_FONT_SIZE_MAX=0x10;
privateconstbyteSP_FONT_SIZE_MIN=6;
privateconststringSYMBIAN_RETURN="\u2029";
privateconststringSYMBIAN_SPACE="";
privateconstbyteUMD_DCTD_HEAD_LEN=9;
privateconstbyteUMD_DCTS_HEAD_LEN=5;
privateconstintUMD_FREE_CID_MIN=0x5f5e100;
privateconstintUMD_FREE_PGK_SEED_MIN=0x400;
privateconstintUMD_LICENSEKEY_LEN=0x10;
privateconstintUMD_MAX_BOOKMARK_STR_LEN=40;
privateconstbyteUMD_PLATFORM_ID_NONE=0;
privateconstbyteUMD_PLATFORM_ID_S60=1;
privateconstbyteUMD_PLATFORM_ID_SP=5;
privateconstintUMD_SEGMENT_LENGTH=0x8000;
privateconstbyteVER_PKG_LEN=3;
privateconststringWINDOWS_RETURN="\r\n";
privateconstintZIP_LEVEL=9;

privatebyteCharWidth_S60(stringChar,bytepFontSize)
{
ushortnum=Char[0];
for(inti=0;i<this.iWidthData_S60.Count;i++)
{
SWidthDatadata
=(SWidthData)this.iWidthData_S60[i];
if(((data.FontSize==pFontSize)&&(num>=data.rngFrom))&&(num<=data.rngTo))
{
if(data.vCount==1)
{
returndata.Value[0];
}
returndata.Value[num-data.rngFrom];
}
}
returnpFontSize;
}

privatebyteCharWidth_SP(stringChar,bytepFontSize)
{
ushortnum=Char[0];
for(inti=0;i<this.iWidthData_SP.Count;i++)
{
SWidthDatadata
=(SWidthData)this.iWidthData_SP[i];
if(((data.FontSize==pFontSize)&&(num>=data.rngFrom))&&(num<=data.rngTo))
{
if(data.vCount==1)
{
returndata.Value[0];
}
returndata.Value[num-data.rngFrom];
}
}
returnpFontSize;
}

privateboolGetPageOffsetS60(bytesize,uintactual_width,refProgressBarpbar,outuint[]result)
{
ArrayListpPageoff
=newArrayList();
if((size!=0x10)&&(size!=12))
{
result
=newuint[0];
returnfalse;
}
this.GetWidthData_S60();
pPageoff.Add(
0);
intnum=pbar.Value;
while(((int)pPageoff[pPageoff.Count-1])<this.iContent.Length)
{
this.ParseOnePage((uint)(pPageoff.Count-1),size,actual_width,refpPageoff,1);
pbar.Value
=num+((int)((uint)pPageoff[pPageoff.Count-1]));
}
result
=newuint[pPageoff.Count];
for(inti=0;i<pPageoff.Count;i++)
{
result[i]
=((uint)pPageoff[i])*2;
}
returntrue;
}

privateboolGetPageOffsetSP(bytesize,uintactual_width,refProgressBarpbar,outuint[]result)
{
ArrayListpPageoff
=newArrayList();
if((size<6)||(size>0x10))
{
result
=newuint[0];
returnfalse;
}
this.GetWidthData_SP();
pPageoff.Add(
0);
intnum=pbar.Value;
while(((uint)pPageoff[pPageoff.Count-1])<this.iContent.Length)
{
this.ParseOnePage((uint)(pPageoff.Count-1),size,actual_width,refpPageoff,5);
if((num+((int)((uint)pPageoff[pPageoff.Count-1])))<pbar.Maximum)
{
pbar.Value
=num+((int)((uint)pPageoff[pPageoff.Count-1]));
}
}
result
=newuint[pPageoff.Count];
for(inti=0;i<pPageoff.Count;i++)
{
result[i]
=(uint)pPageoff[i];
}
returntrue;
}

privatevoidGetWidthData_S60()
{
this.iWidthData_S60.Clear();
for(inti=0;i<2;i++)
{
stringpath="";
switch(i)
{
case0:
path
=Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase.Remove(0,8))+@"\FontWidthData\S60CHS.S16.wdt";
break;

case1:
path
=Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase.Remove(0,8))+@"\FontWidthData\S60CHS.S12.wdt";
break;
}
if(File.Exists(path))
{
FileStreaminput
=newFileStream(path,FileMode.Open,FileAccess.Read);
BinaryReaderreader
=newBinaryReader(input);
while(reader.BaseStream.Position<reader.BaseStream.Length)
{
ushortnum2=reader.ReadUInt16();
ushortnum3=reader.ReadUInt16();
uintnum4=reader.ReadUInt16();
byte[]buffer=newbyte[num4];
for(uintj=0;j<num4;j++)
{
buffer[j]
=reader.ReadByte();
}
SWidthDatadata
=newSWidthData();
switch(i)
{
case0:
data.FontSize
=0x10;
break;

case1:
data.FontSize
=12;
break;
}
data.rngFrom
=num2;
data.rngTo
=num3;
data.vCount
=num4;
data.Value
=buffer;
this.iWidthData_S60.Add(data);
}
reader.Close();
input.Close();
}
}
}

privatevoidGetWidthData_SP()
{
this.iWidthData_SP.Clear();
for(inti=0x10;i<0x11;i++)
{
stringpath=(Assembly.GetExecutingAssembly().CodeBase.Remove(0,8)+@"\FontWidthData\sunfon.s")+i.ToString()+".wdt";
if(File.Exists(path))
{
FileStreaminput
=newFileStream(path,FileMode.Open,FileAccess.Read);
BinaryReaderreader
=newBinaryReader(input);
while(reader.BaseStream.Position<reader.BaseStream.Length)
{
ushortnum2=reader.ReadUInt16();
ushortnum3=reader.ReadUInt16();
uintnum4=reader.ReadUInt16();
byte[]buffer=newbyte[num4];
for(uintj=0;j<num4;j++)
{
buffer[j]
=reader.ReadByte();
}
SWidthDatadata
=newSWidthData();
data.FontSize
=(byte)i;
data.rngFrom
=num2;
data.rngTo
=num3;
data.vCount
=num4;
data.Value
=buffer;
this<
分享到:
评论

相关推荐

    umd手机电子书阅读器

    UMD(Universal Mobile Dictionary)手机电子书阅读器是一款专为UMD格式设计的免安装阅读软件,它使得用户能够在移动设备上轻松享受阅读的乐趣。UMD格式是专门为手机设计的一种电子书格式,集文本、图片甚至音频于...

    umd 电子书格式解析器源代码

    解析 umd 格式电子书, 可以自动转换 txt 文件到 umd 格式电子书格式

    UMD格式电子书制作 UMD炮手

    UMD(Universal Mobile Document)格式是一种专为手机和移动设备设计的电子书格式,它集成了文本、图像、音频等多种媒体资源,便于在小型屏幕上阅读。UMD炮手是一款工具软件,主要用于制作、阅读和编辑UMD格式的...

    电子书UMD格式制作工具 炮手2.0

    UMD(Universal Mobile Document)是一种专为移动设备设计的电子书格式,主要流行于早期的Java手机和平板电脑。这种格式能够将文本、图片、甚至音频等多媒体内容封装在一起,便于在资源有限的移动设备上阅读。炮手...

    手机UMD电子书制作工具

    UMD(Universal Mobile Document)是一种专门用于手机阅读的电子书格式,它集成了文本、图片、音频等多种媒体元素,使得阅读体验更加丰富。本篇文章将详细介绍如何使用“手机UMD电子书制作工具”来创建自己的UMD...

    umd格式电子书编辑器

    UMD格式电子书编辑器则是一个专为创建和编辑UMD格式电子书而设计的工具,允许用户自定义内容,打造个性化的手机电子书。 UMD格式的优势在于其广泛兼容性。在浏览器环境中,UMD可以检测环境中是否存在AMD或CommonJS...

    umd炮手电子书制作

    UMD(Universal Mobile Document)是一种流行于早期移动设备上的电子书格式,主要应用于Java平台的手机。"umd炮手电子书制作"是一个工具,能够帮助用户将书籍内容转化为UMD或TXT格式,以便在不同设备上阅读。这个...

    制作UMD电子书UMD 炮手2.1

    UMD(Universal Mobile Device,通用移动设备)电子书是一种适合在各种移动设备上阅读的电子书籍格式,尤其在早期智能手机和平板电脑中较为流行。UMD格式能够将文本、图片和多媒体内容打包在一起,便于在资源有限的...

    umd电子书阅读工具(PC端)

    UMD(Universal Mobile Document)是早期流行的一种移动设备电子书格式,尤其在早期的智能手机和平板电脑中常见。这款阅读工具能够帮助用户打开并浏览UMD格式的书籍,提供舒适的阅读环境。 该工具的核心功能可能...

    JAR和UMD格式电子书阅读器

    其次,UMD(Universal Mobile Documentation)格式是专为移动设备设计的一种电子书格式,尤其在诺基亚S40系列手机中常见。UMD文件不仅包含了书籍内容,还可能包含元数据和版权保护信息。这种格式旨在提供一种简便的...

    UMD电子书制作软件

    UMD格式是早期手机电子阅读器上广泛使用的一种格式,它集成了文本、图片甚至音频等多媒体元素,使得电子书内容更加丰富多彩。 首先,我们要理解TXT格式。TXT是最基础的纯文本格式,不包含任何排版或样式信息,只...

    umd炮手(制作umd格式电子书)V2.00绿色免费版

    umd 炮手是一款可以帮助用户制作umd格式电子书的制作工具,用户通过该umd制作工具可以轻轻松松就完成一款电子书的制作,使用非常简单,操作也很方便,是用户制作电子书的好帮手,需要的用户快来下载吧。 umd炮手 ...

    UMD TXT互转 电子书格式互转

    首先,UMD(Universal Mobile Document)格式是专为手机设计的一种电子书格式,尤其在早期的非智能手机时代非常流行。它包含了文本、图片甚至音频等多媒体元素,能够提供更丰富的阅读体验。然而,UMD文件通常较大,...

    umd格式手机阅读器pc版

    总的来说,UMD格式手机阅读器PC版,如“非常酷手机书阅读器”,为用户提供了在个人电脑上阅读UMD电子书的便捷途径,无论是为了娱乐还是学习,都能在大屏幕上获得良好的阅读体验。随着电子书的普及,这样的阅读工具...

    UMD电子书制作工具

    UMD电子书制作工具是一种专为创建和编辑UMD(Universal Mobile Digital)格式电子书而设计的应用程序。UMD格式通常用于移动设备,尤其是早期的智能手机和平板电脑,它允许用户在小型屏幕上阅读电子书籍。这种格式...

    手机编成 umd格式

    1. 直接读取UMD格式电子书,允许编辑后保存。 2. 支持章节的合并,添加,删除,排序。 3. 支持编辑作者,发布日期,类别等。 4, 支持一次合并多个UMD文件。 5. 支持一次合并多个文本文件。 6. 支持更换封面,不限制...

    UMD 电子书制作软件.

    UMD(Universal Mobile Document)电子书格式是一种专为移动设备设计的文件格式,尤其是在早期的智能手机和平板电脑中广泛使用。UMD格式的电子书能够包含文本、图像甚至音频,使其成为一种综合性的多媒体阅读体验。...

    umd、html、jar、pdf、pdb、rtf、hlp、pdb、chm电子书格式万能转换器

    1. UMD(Universal Mobile Document):这是一种专为移动设备设计的电子书格式,它将文本、图片和样式集成在一个单一的文件中,方便在手机或小屏幕设备上阅读。UMD格式通常用于早期的智能手机和平板电脑,现在可能较...

    掌上书院UMD与TXT格式转换工具

    掌上书院UMD与TXT格式转换工具是一款专为电子书爱好者设计的应用,旨在帮助用户方便地在UMD(掌上书院专用格式)和TXT(纯文本格式)之间进行转换。这款工具简化了文件格式互换的过程,使得在不同设备或阅读软件间...

Global site tag (gtag.js) - Google Analytics