从TTF字体流创建GlyphTypeface对象我知道如何通过提供绝对路径使用位于磁盘上的字体文件创建GlyphTypeface对象。GlyphTypefaceglyphTypeface=newGlyphTypeface(newUri(@"C:SomeTrueTypeFont.ttf",UriKind.Absolute));我不知道如何使用存储在内存流中的字体文件创建相同的GlyphTypeface对象。由于权限等原因,我的应用程序无法将字体流保存到磁盘。如果有人可以建议我如何做,我将不胜感激。我认为这是不可能的。WPFundercover使用依赖于物理文件的本机IDWriteFontFile接口。可以从(复制)流创建GlyphTypeface。它的实现方式类似于包装字体和WPF应用程序。您必须将字体流复制到添加到PackageStore的内存包中的PackagePart。关键部分是将正确的Uri传递给GlyphTypeface构造函数。下面是内存包的一种可能实现:sealedclassMemoryPackage:IDisposable{privatestaticintpackageCounter;privatereadonlyUripackageUri=newUri("payload://memorypackage"+Interlocked.Increment(refpackageCounter),UriKind.Absolute);privatereadonlyPackagepackage=Package.Open(newMemoryStream(),FileMode.Create);私有int部分计数器;publicMemoryPackage(){PackageStore.AddPackage(this.packageUri,this.package);}publicUriCreatePart(Streamstream){returnthis.CreatePart(stream,"application/octet-stream");}publicUriCreatePart(Streamstream,stringcontentType){varpartUri=newUri("/stream"+(++this.partCounter),UriKind.Relative);varpart=this.package.CreatePart(partUri,contentType);使用(varpartStream=part.GetStream())CopyStream(stream,partStream);//每个packUri必须是全局唯一的,因为WPF可能会基于它执行一些缓存。返回PackUriHelper.Create(this.packageUri,partUri);}publicvoidDeletePart(UripackUri){this.package.DeletePart(PackUriHelper.GetPartUri(packUri));}publicvoidDispose(){PackageStore.RemovePackage(this.packageUri);这个.package.Close();}privatestaticvoidCopyStream(Streamsource,Streamdestination){constintbufferSize=4096;byte[]buffer=newbyte[bufferSize];诠释阅读;while((read=source.Read(buffer,0,buffer.Length))!=0)目的地。写入(缓冲区,0,读取);这是一个示例代码,如何使用它来创建(复制)MemoryStream的GlyphTypeface:以上就是C#学习教程的全部内容:从TTF字体流创建GlyphTypeface对象。大家有用,需要多了解C#学习教程,希望大家多多关注—GlyphTypefaceglyphTypeface;使用(varmemoryPackage=newMemoryPackage()){使用(varfontStream=newMemoryStream(File.ReadAllBytes(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),"font")))){vartypefaceSource=memoryPackage.CreatePart(字体流);glyphTypeface=newGlyphTypeface(typefaceSource);memoryPackage.DeletePart(typefaceSource);}}varfamilyName=字形Typeface.FamilyNames[CultureInfo.GetCultureInfo("en-US")];Console.WriteLine(familyName);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
