PDA

View Full Version : تبدیل پیکسل به سانتی متر



moh899
چهارشنبه 29 بهمن 1393, 21:57 عصر
با سلام
برای تبدیل پیکسل به سانتی متر فقط می دونم که باید DPIرو بدست آورد.حالا سوالم اینه چگونه DPI به دست بیارم و در نهایت چگونه پیکسل رو به سانتی متر تبدیل کنم.
با تشکر

golbafan
پنج شنبه 30 بهمن 1393, 08:21 صبح
سلام


float dpiX = 96, dpiY = 96;
using(Graphics graphics = this.CreateGraphics())
{
dpiX = graphics.DpiX;
dpiY = graphics.DpiY;
}

boxochi
پنج شنبه 30 بهمن 1393, 11:54 صبح
این کد dpi یعنی تعداد پیکسل در هر اینچ رو بدست میاره
برای محاسبه تعداد پیکسل در هر سانتی متر:

float dpcX, dpcY;
using(Graphics graphics = this.CreateGraphics())
{
dpcX = graphics.DpiX / 2.54f;
dpcY = graphics.DpiY/2.54f;

}

Death Ghost
پنج شنبه 30 بهمن 1393, 15:28 عصر
هر اینچ 2.5 سانت هست و اگه هر اینچ رو هم دارای 96 پیکسل در نظر بگیریم :

centimeters = pixels * 2.54 / 96

moh899
پنج شنبه 30 بهمن 1393, 18: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, 08: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, 08:29 صبح
اول باید dpi مختص هر صفحه ر بدست بیارید بعد در فرمولی که دوستان عنایت کردن استفاده کنید