我有一个Silverlight应用程序,我需要嵌入一些不常见的字体.这对我来说很简单,只需复制TTF/OTF并用我的应用程序编译.但是,在许多情况下,实际上只使用了5-10个字符.在其他情况下,一些字体文件非常大(例如Arial Unicode MS Regular是22.1 MB).我的应用程序的快速下载时间非常重要,因此优化使用的字体至关重要.
所以,我在想的是我在Expression Blend等应用程序中看到过,其中a <Glyph/> 用于创建只读字体,你也可以选择只嵌入某些字符.在其他情况下,我看到人们使用仅包含某些字符的字体作为完整字体的子集(而不是<Glyph/>在Silverlight中使用a ,而只是使用子集.TTF作为<FontFamily/>.)这就是什么我在追求,除了我没有使用表达式.
我不是在寻找偷偷摸摸的解决方法,比如导出到XPS文件并抓取.odtff文件.
是否有一种编程方式(.NET/GDI +)来创建只包含某些字符的字体子集并将其编译为.TTF/.OTF?此外,这也需要适用于.TTC文件.
想象一下,我有4个点的坐标,形成一个多边形.这些点在C#中使用PointF表示.如果我有2个多边形(使用8个点),我怎么知道它们是否相交?
Rectangle类有一个名为IntersectsWith的方法,但我找不到类似于GraphicsPath或Region的东西.
任何建议将不胜感激.
MOSH
这个问题在MSChart论坛上一直没有得到回答超过一年.
我不断在图表上获得溢出异常.我正在设置我的图表如下:
Run Code Online (Sandbox Code Playgroud)InstrChart.Legends.Clear(); dataArea = InstrChart.ChartAreas.Add("Instr1"); dataArea.AxisX.MajorGrid.Enabled = false; dataArea.AxisY.MajorGrid.Enabled = false; dataArea.CursorX.IsUserSelectionEnabled = true;我正在添加12个系列,每个系列大约10000点.
当我向下缩放以显示每个系列只有3或4个点时会发生异常.在我释放鼠标按钮进行缩放后,我立即得到以下异常:
Run Code Online (Sandbox Code Playgroud)System.OverflowException was caught Message="Overflow error." Source="System.Drawing" StackTrace: at System.Drawing.Graphics.CheckErrorStatus(Int32 status)(等 - 请参阅上面的链接以获取完整的跟踪.)
我已经删除了图表的所有事件处理程序,没有运气停止从eventuall缩放导致此异常.我已经为图表设置了IsUserSelectionEnabled为false,并且在没有运气的情况下完成了代码缩放.
对这个问题的任何帮助都会很棒.干杯.
无论图表的其余部分是如何配置的,无论何时缩小"太远"(其含义可能会有所不同),任何时候都会出现此异常.有几个人报告了这个问题.异常助手表示它在System.Drawing.dll中.
这里有人有任何线索或解决方法吗?
我有一个应用程序,使用(C#)将文本写入图像System.Drawing.
我使用特定字体来执行此操作.
由于我不能依赖我的共享托管服务器来获得我可能需要的所有自定义字体(并且由于字体列表可能会增长),我如何管理用于我的应用程序的字体?
我可以.ttf在项目中包含文件并以某种方式引用它们吗?
包含字体的SQL数据库怎么样?
我正在使用.NET绘制图表,我想在用户点击它们时突出显示对象.当图形完全包含在矩形中时很容易:
if (figure.Bounds.Contains(p)) // bounds is a rectangle
Run Code Online (Sandbox Code Playgroud)
但如果数字很复杂,我不知道如何管理它GraphicsPath.
我GraphicsPath为图(绿色圆圈)定义了以下内容.

我想在用户点击它时突出显示该图.我想知道是否Point包含a GraphicsPath.
有任何想法吗?提前致谢.
我正在使用.NET框架(尝试3.5和4.0)加载.TIFF文件并将其另存为.PNG.我希望两次后续调用Save()方法(使用相同的TIFF文件)来生成相同的PNG文件.但是,生成的文件"有时"不同.
下面的C#代码显示了问题:
Image sourceToConvert = Bitmap.FromFile("c:\\tmp\\F1.tif");
sourceToConvert.Save("c:\\tmp\\F1_gen.png", ImageFormat.Png);
for (int i = 0; i < 100; i++)
{
sourceToConvert = Bitmap.FromFile("c:\\tmp\\F1.tif");
sourceToConvert.Save("c:\\tmp\\F1_regen.png", ImageFormat.Png);
if (!CompareFileBytes("c:\\tmp\\F1_gen.png", "c:\\tmp\\F1_regen.png"))
MessageBox.Show("Diff" + i);
}
Run Code Online (Sandbox Code Playgroud)
这将在Windows 64上的迭代8,32,33,73 114,155,196处显示"Diff",而在32位计算机上不显示任何错误.(我使用x86目标;使用x64目标,情况更糟:迭代12,13,14,15 ......的差异)
有没有办法从Save()获得可重现的结果?
可以在此FTP站点上找到示例图像
问题得到了回答.有关更多信息,请查看本文末尾的编辑#4.
我们目前正在开发一款相当不错的游戏制作引擎.我正在制作动画创作者,并想知道是否可以使用添加剂混合绘制图像.
让我解释.
我们使用C#的System.Drawing库,我们使用Windows Forms.目前,用户可以通过导入带框架的动画图像(包含动画的每一帧的图像)来创建动画,并且用户可以将这些帧拖放到他想要的任何地方.
实际问题是我们无法弄清楚如何使用添加剂混合绘制框架.
这是添加剂混合的例子,如果你没有得到它.我不会责怪你,我很难用英语写作.

我们使用以下方法在Panel上绘图或直接在表单上绘制.例如,这里是为地图编辑器绘制平铺地图的代码.由于AnimationManager代码很乱,所以这个例子会更清楚.
using (Graphics g = Graphics.FromImage(MapBuffer as Image))
using (Brush brush = new SolidBrush(Color.White))
using (Pen pen = new Pen(Color.FromArgb(255, 0, 0, 0), 1))
{
g.FillRectangle(brush, new Rectangle(new Point(0, 0), new Size(CurrentMap.MapSize.Width * TileSize, CurrentMap.MapSize.Height * TileSize)));
Tile tile = CurrentMap.Tiles[l, x, y];
if (tile.Background != null) g.DrawImage(tile.Background, new Point(tile.X * TileSize, tile.Y * TileSize));
g.DrawRectangle(pen, x * TileSize, y * TileSize, TileSize, TileSize);
}
Run Code Online (Sandbox Code Playgroud)
有没有可能用附加图纸绘制图像的方法,如果是这样的话,如果有人能指出我是怎么回事,我将永远感激不尽.谢谢.
编辑#1:
对于绘制图像,我们使用颜色矩阵来设置色调和alph(不透明度),如下所示:
ColorMatrix matrix = new ColorMatrix …Run Code Online (Sandbox Code Playgroud) 根据我在SO和网络上的研究,保存位图时的GDI +泛型错误显然是一个常见问题.给出以下简化的代码段:
byte[] bytes = new byte[2048 * 2048 * 2];
for (int i = 0; i < bytes.Length; i++)
{
// set random or constant pixel data, whatever you want
}
Bitmap bmp = new Bitmap(2048, 2048, PixelFormat.Format16bppGrayScale);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, 2048, 2048), ImageLockMode.ReadWrite, bmp.PixelFormat);
System.Runtime.InteropServices.Marshal.Copy(bytes, 0, bmpData.Scan0, 8388608);
bmp.UnlockBits(bmpData);
bmp.Save(@"name.bmp");
Run Code Online (Sandbox Code Playgroud)
这导致0x80004005一般错误.通常的原因据说是锁定组件,但我在这里看不到任何东西.我只是瞎了吗?我保存的路径存在,当然,只创建一个空的bmp文件(0B).
背景:我从使用C++/CLI包装器传输到.NET的相机驱动程序获取像素数据,因此上面的Bitmap对象由函数调用返回.但是,由于这个小例子已经失败,我猜这个适配器没有任何问题.
任何建议都非常感谢!
我现在正在尝试将System.Drawing添加到Visual Studio 2015中的引用.似乎没有什么工作.当我进入添加引用窗格时,列表中没有System.Drawing.
我需要来自System.Drawing的Bitmap类,而不是Android.Graphics中的Bitmap类
我需要在控件中显示高分辨率图像的预览缩略图,以供用户选择。我目前使用ImageListView加载图像。这对于低至中分辨率的图像效果很好。但是,在显示非常高分辨率的图像的缩略图时会出现明显的延迟。可以从https://drive.google.com/open?id=1Qgu_aVXBiMlbHluJFU4fBvmFC45-下载示例图像E81C
图像大小约为5000x3000像素,大小约为12 MB。可以通过使用此图像的1000份副本来复制此问题。
问题屏幕截图在此处上传
https://giphy.com/gifs/ZEH3T3JTfN42OL3J1A
使用后台工作程序加载图像
foreach (var f in filepaths)
{
imageListView1.Items.Add(f);
}
Run Code Online (Sandbox Code Playgroud)
1.为了解决此问题,我尝试调整高分辨率图像的大小并将调整大小后的图像添加到ImageListView ...中,但是要进行重新调整大小会浪费大量时间,并且缩略图生成速度很慢。
Bitmap x = UpdatedResizeImage2(new Bitmap(f), new Size(1000, 1000));
string q = Path.GetTempPath() + Path.GetFileName(f);
x.Save(Path.GetTempPath() + Path.GetFileName(f));
x.Dispose();
imageListView1.Items.Add(Path.GetTempPath() + Path.GetFileName(f));
Run Code Online (Sandbox Code Playgroud)
2.我也尝试过Image.CreateThumbnail方法,但这也很慢。
有没有更好的方法来解决此问题?
system.drawing ×10
c# ×7
.net ×6
fonts ×2
gdi+ ×2
truetype ×2
winforms ×2
asp.net-mvc ×1
drawing ×1
image ×1
intersection ×1
mschart ×1
polygon ×1
xamarin ×1