C# 怎样让屏幕显示的图片大小与实际物理尺寸一致?

~王者归来~ 2016-05-23 07:10:31
我发现,设置的图片大小是80*80 (毫米),但是实际在屏幕上测量得到的却是8.5*8.5,怎样编程能保证不同的显示器都一致呢?
...全文
460 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
弹指神功 2018-12-28
  • 打赏
  • 举报
回复
class GetPixSize
{
#region Win32 API
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr ptr);

[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);

[DllImport("user32.dll", EntryPoint = "ReleaseDC")]
static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);
#endregion
#region DeviceCaps常量
const int HORZSIZE = 4;
const int VERTSIZE = 6;
const int LOGPIXELSX = 88;
const int LOGPIXELSY = 90;
const int DESKTOPVERTRES = 117;
const int DESKTOPHORZRES = 118;
#endregion
public static double GetPixWidth(double mm)
{
IntPtr hdc = GetDC(IntPtr.Zero);
int mmDeskWidth = GetDeviceCaps(hdc, HORZSIZE);
int pxDeskWidth = GetDeviceCaps(hdc, DESKTOPHORZRES);
int xDpi = GetDeviceCaps(hdc, LOGPIXELSX);
double scaleX = xDpi / 96.0;
double pxCountPermm = 1.0 * pxDeskWidth / mmDeskWidth;
double pxCount = pxCountPermm * mm / scaleX;
ReleaseDC(IntPtr.Zero, hdc);

return pxCount;
}

public static double GetPixHeight(double mm)
{
IntPtr hdc = GetDC(IntPtr.Zero);
int mmDeskHeight = GetDeviceCaps(hdc, VERTSIZE);
int pxDeskHeight = GetDeviceCaps(hdc, DESKTOPVERTRES);
int yDpi = GetDeviceCaps(hdc, LOGPIXELSY);
double scaleY = yDpi / 96.0;
double pxCountPermm = 1.0 * pxDeskHeight / mmDeskHeight;
double pxCount = pxCountPermm * mm / scaleY;
ReleaseDC(IntPtr.Zero, hdc);

return pxCount;
}
}
  • 打赏
  • 举报
回复
如果没有理解错的话,你是想所有的屏幕上显示图片都是80*80mm吧。如果是这样的话,你的问题没描述清楚。 在屏幕上图像的大小是以像素为单位的,所以首先得知道毫米和像素之间的转换。 象素数 / DPI = 英寸数 英寸数 * 25.4 = 毫米数 DPI是每英寸多少像素点 因此 1毫米=DPI/25.4 个像素,80毫米=80*DPI/25.4个像素。所以你设置图片大小之前先要获得屏幕的DPI,然后算出显示80毫米需要的像素,设置图像大小。如果是WPF的话最好设置图像显示控件的SnapsToDevicePixels =true
jiaoshiyao 2016-05-24
  • 打赏
  • 举报
回复
CSDN完了,不会有大牛了
万婷 2016-05-24
  • 打赏
  • 举报
回复
取图片的分辨率改控件的大小
xuzuning 2016-05-24
  • 打赏
  • 举报
回复
不要冒充大头鬼 DPI = 96 80毫米=80*DPI/25.4个像 = 302.36220472441 取整(无法设置小数像素) 为 302 运行后,实测宽度为 85mm
圣殿骑士18 2016-05-24
  • 打赏
  • 举报
回复
怎么看都像伪需求
NE_1983 2016-05-24
  • 打赏
  • 举报
回复
<div style="width:100%;float:right"> <img class="imgShow" src='@(!string.IsNullOrWhiteSpace(Model.thumbnail) ? Model.thumbnail : "Images/nopic.png")' width="200px" height="200px" /></div> 你换算成像素
南天空 2016-05-23
  • 打赏
  • 举报
回复
屏幕上的长宽是用像素和分辨率来确定的,设计的时候如果想让显示的是实际尺寸,那么就放一个一样大的控件,铺满。不同屏幕下要想显示效果一样,需要支持自动缩放。WPF ViewBox。winform程序很难实现
牧歌ing 2016-05-23
  • 打赏
  • 举报
回复
你都设置成死的了还能变?

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧