Tag: dpi

iTextSharp获得PDF DPI

如何将我从硬盘中读取的PDF的DPI转换为iTextSharp?

C#WPF SizeChanged事件在最大化时不更新宽度和高度

当使用SizeChanged更改表单大小时,我试图更新我的控件。 除了全屏播放外,它工作得很好。 我搜索了网格事件,但找不到用户最大化窗口时发生的任何事件(全屏显示)。

SetProcessDpiAwareness没有效果

我一直在尝试在ClickOnce应用程序上禁用DPI感知。 我很快发现,无法在清单中指定它,因为ClickOnce不支持清单文件中的asm.v3。 我找到的下一个选项是调用新的Windows函数SetProcessDpiAwareness 。 根据这个教程, 在创建应用程序窗口之前调用SetProcessDpiAwareness。 这个教程, 您必须在任何Win32API调用之前调用SetProcessDpiAwareness 你必须尽早调用这个函数。 所以,为了测试,我创建了一个完全空白的WPF应用程序,并将其作为我的整个App类: [DllImport(“SHCore.dll”, SetLastError = true)] private static extern bool SetProcessDpiAwareness(PROCESS_DPI_AWARENESS awareness); [DllImport(“SHCore.dll”, SetLastError = true)] private static extern void GetProcessDpiAwareness(IntPtr hprocess, out PROCESS_DPI_AWARENESS awareness); private enum PROCESS_DPI_AWARENESS { Process_DPI_Unaware = 0, Process_System_DPI_Aware = 1, Process_Per_Monitor_DPI_Aware = 2 } static App() { var result = SetProcessDpiAwareness(PROCESS_DPI_AWARENESS.Process_DPI_Unaware); var […]

如何检查PDF页面的嵌入图像的分辨率(DPI)?

有没有免费的库,可以用来获取PDF文件中包含的DPI图像的分辨率? 我尝试了以下代码,使用PDFSharp,但它返回的DPI不正确。 例如,它显示96dpi,而它应该是150dpi: using (PdfDocument pdf = PdfReader.Open(sourcePdf)) { for (int i = 0; i < pdf.Pages.Count; i++) { XGraphics xGraphics = XGraphics.FromPdfPage(pdf.Pages[i]); float dpi = xGraphics.Graphics.DpiX; } }

如何配置应用程序以在具有高DPI设置(例如150%)的计算机上正确运行?

我在C#中创建了一个简单的Winforms应用程序。 当我在具有高DPI设置(例如150%)的计算机上运行应用程序时,应用程序会按比例放大。 到现在为止还挺好! 但是,不是使用更高的字体大小渲染字体,所有文本也只是按比例放大。 这当然导致非常模糊的文本(在按钮等所有控件上)。 Windows不应该正确地渲染文本吗? 例如,我的应用程序的标题栏呈现清晰明了。

将面板打印到打印机

我正在尝试将面板(及其内容)打印到打印机。 我在网上看到了不同的post,但我无法打印面板并获得正确的尺寸。 面板打印得非常大,并不像预期的那样。 例如,我想打印一个面板,输出尺寸为80mm X 40mm: private void Print_Click(object sender, EventArgs e) { int pixelsWidth = 300; // 300 pixels= ~8cm int pixelsHeight = 150; // 150 pixels= ~4cm panelLabel.Size = new Size(pixelsWidth,pixelsHeight); PrintPanel(); } private void PrintPanel() { System.Drawing.Printing.PrintDocument doc = new PrintDocument(); doc.PrintPage += new PrintPageEventHandler(doc_PrintPage); doc.Print(); } private void doc_PrintPage(object sender, PrintPageEventArgs […]

.NET – Bitmap.Save在Windows 7上忽略Bitmap.SetResolution

我正在编写一个.NET 4应用程序,用于导入和保存图像以进行打印。 保存的图像分辨率(DPI不是像素尺寸)必须设置为我们指定的值,以便正确打印。 我们导入的一些图像没有分辨率值(生成它们时出现错误的EXIF),因此我们必须在编写之前纠正它们。 我们使用Bitmap.SetResolution。 它在XP和Windows 8上工作正常,但是当我们在Windows 7上编写(Bitmap.Save)图像时,它们总是用原始分辨率元信息编写,忽略SetResolution。 这是我们做的测试,适用于XP和8,而不是7。 string originalFile = @”D:\temp\img\original_img.jpg”; string newFile = @”D:\temp\img\new_img.jpg”; Bitmap bitmap = (Bitmap)Image.FromFile(originalFile); bitmap.SetResolution(200, 200); bitmap.Save(newFile, ImageFormat.Jpeg); Image image = Image.FromFile(newFile); int dpiX = (int)Math.Round(image.HorizontalResolution, MidpointRounding.ToEven); int dpiY = (int)Math.Round(image.VerticalResolution, MidpointRounding.ToEven); Console.WriteLine(“DPI is {0} x {1}”, dpiX, dpiY); 在保存之前,调试始终显示由SetResolution指定的正确分辨率,保存的图像是问题所在。 这可能是这里报道的: http : //social.msdn.microsoft.com/Forums/vstudio/en-US/62368caa-05f4-4798-9c59-5d82f881a97c/systemdrawingbitmapsetresolution-is-completely-broken-on-windows- 7?论坛= netfxbcl 但那里的问题似乎仍未得到解决。 真的没有办法让它发挥作用吗? […]

让WPF应用程序忽略DPI设置

我有一个专为1900×1200分辨率设计的wpf应用程序,但我们的一些用户使用了Windows显示设置将所有内容调整为125%-150%,有没有办法让应用程序忽略这些设置并仍能正常显示? 我在这里看到了一些名为SetProcessDPIAware的东西 ,但它没有任何运气。 以下是应用程序的屏幕截图,显示比例调高至150% 正如您所看到的,应用程序太小,无法使其正确resize。

我可以告诉Visual Studio不要更改项目的DPI吗?

我有一个从.NET 1.1转换为3.5的项目正在2008年开发。 如果我在Windows 7上打开项目,它会将所有内容的大小转换为120dpi大小。 如果我然后用96 dpi打开它,它会改回来。 有没有办法让我开发,所以它看起来都很好,如果在具有不同DPI的系统上打开,Visual Studio 不会更改大小? 这个问题可能更好地表达/重复: 视觉工作室设计师dpi设置 或者在这里: Visual Studio和DPI问题 要清楚我正在尝试做的是防止控件在被具有不同DPI设置的多个开发人员使用时在设计器中resize。 在我注意到这个问题的所有情况下,我一直在使用.NET 1或.NET 2项目升级到最初使用Visual Studio 2008,现在是Visual Studio 2010。 更新 (如果有人想与@Ben争夺奖励积分):我有一个正确resize的表单,但窗口的大小会以编程方式更改。 由于设计人员不知道尺寸,因此如果使用不同DPI的开发人员触摸表单,则窗口会不正确地resize。 有没有办法解决这个问题,而不是回到不在运行时缩放UI? 例如:我声明的窗口有两种尺寸,如果开发人员在设计时使用120 dpi,它可以正常工作: private static Size smallSize = new Size(960, 500); private static Size largeSize = new Size(960, 615); 如果有人在96dpi的设计师中编辑表单,我只是想绕过我需要做的事情,不要有一个可怕的设计回归。

屏幕分辨率与Screen.Bounds不匹配

我看到通过控制面板设置的分辨率和我的宽屏笔记本电脑的Screen.Bounds输出之间有一个有趣的区别。 屏幕为15.5“,通过控制面板设置的分辨率为1920×1080。但是当我运行这样的代码时。 Screen[] screens = Screen.AllScreens; foreach (Screen scr in screens) { Console.WriteLine(“Width: ” + scr.Bounds.Width + “, Height: ” + scr.Bounds.Width); } 输出显示我的分辨率为1536×864。 我做了一些环顾四周,我认为它可能与DPI问题有关,当我查看我的显示设置时,滑块(我在Windows 8.1上)位于中间,复选框指出“让我为我的所有显示选择一个缩放级别“未选中。 我运行这个小代码来获取当前的DPI设置。 float dpiX, dpiY; Graphics graphics = new System.Windows.Forms.Form().CreateGraphics(); Console.WriteLine(“DPI: ” + graphics.DpiX); 返回的DPI是96.0,根据我的理解,它是100%DPI设置(因此没有放大或任何调用)。 对我来说似乎很奇怪的是,Screen返回的界限恰好是我实际分辨率的80%,这会让我认为我的DPI设置为100(或125%),但事实并非如此。 我的笔记本电脑屏幕只有这个问题,因为我的辅助显示器的界限等于通过控制面板的分辨率。 这是因为我的DPI设置未设置为使显示器彼此独立(选中该复选框)? 对于一些背景知识,我正在编写一个工具,它可以获取当前屏幕并从reddit获取图片,并将它们彼此独立地放在屏幕上,所以无论我有什么解决方案,它都必须正确地获得每个显示器的分辨率。