View Full Version : تبدیل پیکسل به سانتی متر
moh899
چهارشنبه 29 بهمن 1393, 22:57 عصر
با سلام
برای تبدیل پیکسل به سانتی متر فقط می دونم که باید DPIرو بدست آورد.حالا سوالم اینه چگونه DPI به دست بیارم و در نهایت چگونه پیکسل رو به سانتی متر تبدیل کنم.
با تشکر
golbafan
پنج شنبه 30 بهمن 1393, 09:21 صبح
سلام
float dpiX = 96, dpiY = 96;
using(Graphics graphics = this.CreateGraphics())
{
dpiX = graphics.DpiX;
dpiY = graphics.DpiY;
}
boxochi
پنج شنبه 30 بهمن 1393, 12:54 عصر
این کد dpi یعنی تعداد پیکسل در هر اینچ رو بدست میاره
برای محاسبه تعداد پیکسل در هر سانتی متر:
float dpcX, dpcY;
using(Graphics graphics = this.CreateGraphics())
{
dpcX = graphics.DpiX / 2.54f;
dpcY = graphics.DpiY/2.54f;
}
Death Ghost
پنج شنبه 30 بهمن 1393, 16:28 عصر
هر اینچ 2.5 سانت هست و اگه هر اینچ رو هم دارای 96 پیکسل در نظر بگیریم :
centimeters = pixels * 2.54 / 96
moh899
پنج شنبه 30 بهمن 1393, 19:01 عصر
سلام دوستان
متد های زیر رو برای تبدیل پیکسل به سانتی متر و بر عکس رو دارم.ولی به نظر درست کار نمی کنه چون وقتی با خط کش اندازه می گیرم درست در نمی اید.
لطفاً راهنمایی کنید 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;
}
mory2008
یک شنبه 17 خرداد 1394, 09:26 صبح
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;
}
mory2008
یک شنبه 17 خرداد 1394, 09:29 صبح
اول باید dpi مختص هر صفحه ر بدست بیارید بعد در فرمولی که دوستان عنایت کردن استفاده کنید
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.