您的位置:首页 > 其它

计算图片物理大小

2013-09-05 17:04 183 查看
//先计算系统dpi,以下是代码
public partial class Form1 : Form
{
int dpi_x;
int dpi_y;
public Form1()
{
InitializeComponent();
//SetProcessDPIAware(); //重要
IntPtr screenDC = GetDC(IntPtr.Zero);
dpi_x = GetDeviceCaps(screenDC, /*DeviceCap.*/LOGPIXELSX);
dpi_y = GetDeviceCaps(screenDC, /*DeviceCap.*/LOGPIXELSY);
// dpi_x = 96.0;
// dpi_y = 96.0;
ReleaseDC(IntPtr.Zero, screenDC);

}

[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr ptr);

[DllImport("user32.dll", EntryPoint = "ReleaseDC")]
public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDc);

[DllImport("gdi32.dll")]
public static extern IntPtr CreateDC(
string lpszDriver, // driver name
string lpszDevice, // device name
string lpszOutput, // not used; should be NULL
Int64 lpInitData // optional printer data
);

[DllImport("gdi32.dll")]
public static extern int GetDeviceCaps(
IntPtr hdc, // handle to DC
int nIndex // index of capability
);

[DllImport("user32.dll")]
internal static extern bool SetProcessDPIAware();

const int DRIVERVERSION = 0;
const int TECHNOLOGY = 2;
const int HORZSIZE = 4;
const int VERTSIZE = 6;
const int HORZRES = 8;
const int VERTRES = 10;
const int BITSPIXEL = 12;
const int PLANES = 14;
const int NUMBRUSHES = 16;
const int NUMPENS = 18;
const int NUMMARKERS = 20;
const int NUMFONTS = 22;
const int NUMCOLORS = 24;
const int PDEVICESIZE = 26;
const int CURVECAPS = 28;
const int LINECAPS = 30;
const int POLYGONALCAPS = 32;
const int TEXTCAPS = 34;
const int CLIPCAPS = 36;
const int RASTERCAPS = 38;
const int ASPECTX = 40;
const int ASPECTY = 42;
const int ASPECTXY = 44;
const int SHADEBLENDCAPS = 45;
const int LOGPIXELSX = 88;
const int LOGPIXELSY = 90;
const int SIZEPALETTE = 104;
const int NUMRESERVED = 106;
const int COLORRES = 108;
const int PHYSICALWIDTH = 110;
const int PHYSICALHEIGHT = 111;
const int PHYSICALOFFSETX = 112;
const int PHYSICALOFFSETY = 113;
const int SCALINGFACTORX = 114;
const int SCALINGFACTORY = 115;
const int VREFRESH = 116;
const int DESKTOPVERTRES = 117;
const int DESKTOPHORZRES = 118;
const int BLTALIGNMENT = 119;

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(dpi_x.ToString()+"||"+dpi_y.ToString());
}

}


float pw=w/myThumbnail.HorizontalResolution*dpi_x;//物理大小=像素/分辨率*dpi
float ph=h/2/myThumbnail.VerticalResolution*dpi_y;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: