با سلام
برای تبدیل پیکسل به سانتی متر فقط می دونم که باید DPIرو بدست آورد.حالا سوالم اینه چگونه DPI به دست بیارم و در نهایت چگونه پیکسل رو به سانتی متر تبدیل کنم.
با تشکر
با سلام
برای تبدیل پیکسل به سانتی متر فقط می دونم که باید DPIرو بدست آورد.حالا سوالم اینه چگونه DPI به دست بیارم و در نهایت چگونه پیکسل رو به سانتی متر تبدیل کنم.
با تشکر
سلام
float dpiX = 96, dpiY = 96;
using(Graphics graphics = this.CreateGraphics())
{
dpiX = graphics.DpiX;
dpiY = graphics.DpiY;
}
این کد dpi یعنی تعداد پیکسل در هر اینچ رو بدست میاره
برای محاسبه تعداد پیکسل در هر سانتی متر:
float dpcX, dpcY;
using(Graphics graphics = this.CreateGraphics())
{
dpcX = graphics.DpiX / 2.54f;
dpcY = graphics.DpiY/2.54f;
}
هر اینچ 2.5 سانت هست و اگه هر اینچ رو هم دارای 96 پیکسل در نظر بگیریم :
centimeters = pixels * 2.54 / 96
سلام دوستان
متد های زیر رو برای تبدیل پیکسل به سانتی متر و بر عکس رو دارم.ولی به نظر درست کار نمی کنه چون وقتی با خط کش اندازه می گیرم درست در نمی اید.
لطفاً راهنمایی کنیدdouble CentimeterToPixel(double Centimeter) {
double pixel = -1;
using (Graphics g = this.CreateGraphics())
{
pixel = (Centimeter * g.DpiY) / 2.5399999d;
}
return (double)pixel;
}
double PixelToCm(double Pixel)
{
double cm = -1;
using (Graphics g = this.CreateGraphics())
{
cm = (Pixel / g.DpiY) * 2.5399999d;
}
return (double)cm;
}
آخرین ویرایش به وسیله moh899 : جمعه 01 اسفند 1393 در 19:48 عصر
private static readonly int LOGPIXELSX = 88; // Used for GetDeviceCaps(). private static readonly int LOGPIXELSY = 90; // Used for GetDeviceCaps().
/// <summary>Determines the current screen resolution in DPI.</summary>
/// <returns>Point.X is the X DPI, Point.Y is the Y DPI.</returns>
public static Point GetDpi()
{
Point result = new Point();
IntPtr hDC = GetDC(IntPtr.Zero);
result.X = GetDeviceCaps(hDC, LOGPIXELSX);
result.Y = GetDeviceCaps(hDC, LOGPIXELSY);
ReleaseDC(IntPtr.Zero, hDC);
return result;
}
/// <summary>
/// Checks if font is not default.
/// </summary>
/// <returns>True if font DPI is not 96.</returns>
public static bool IsDifferentFont()
{
Point result = GetDpi();
return result.X != 96 || result.Y != 96;
}
[DllImport("gdi32.dll")]
private static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
[DllImport("user32.dll")]
private static extern IntPtr GetDC(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
private double PtToCNT(int Width)
{
int dpi = GetDpi().X;
return (Width * 2.54) / dpi;
}
private double CNTToPt(int Width)
{
int dpi = GetDpi().X;
return (Width * dpi) / 2.54;
}
اول باید dpi مختص هر صفحه ر بدست بیارید بعد در فرمولی که دوستان عنایت کردن استفاده کنید