سؤال

لدي شرط أن يطلب صورة مع 10 × 6,88 سم.أنا أعلم أنني لا أستطيع بسيطة التحويل من سم إلى بكسل ، سبب واحد بكسل حجم يعتمد على المستخدم عرض القرار.أود أن أعرف إذا كان هناك طريقة لتغيير حجم الصورة إلى الحجم في سم.(أنا بحاجة للحفاظ على صورة التمديد أيضا.على سبيل المثال:لا يمكن تحويل إلى pdf أو غيرها من التمديد)

هل كانت مفيدة؟

المحلول

وانها حقا يتوقف على التي ينطبق عليها قرار المستخدم سوف طباعة الصورة (أحجام (سم) لا معنى له بخلاف عند الطباعة). إذا أراد المستخدم لجعل الطباعة في، ويقول 200 نقطة في البوصة، ثم صورة سوف تحتاج إلى أن تكون (10 / 2.54 * 200) بنسبة (6.88 / 2.54 * 200) بكسل (هناك حاجة للتقسيم مع 2.54 للتحويل بين سم وبوصة ). التي قرار ما هو مطلوب يعتمد بشكل كبير على أي نوع من الصور هو عليه، ومتطلبات الجودة للمستخدم.

وهكذا فقط قائلا: "أريد أن تغيير حجم لX من Y سم" لا يجعل حقا معنى.

لعينة متاحة حول كيفية جعل تغيير الحجم الفعلي بمجرد أن برزت حجم الحاجة للصورة، <وأ href = "https://stackoverflow.com/questions/87753/resizing-an-image-without -losing-أي-جودة / 87786 # 87786 "> هذه الإجابة SO ينبغي أن تغطي احتياجاتك.

نصائح أخرى

والواقع، عليك أن تفرق بين حجم الصور على الشاشة، وحجم الصور في النسخة المطبوعة.

وعادة ما تجد الصيغة:

inches = pixels / dpi

لذلك يلي:

pixel = inches * dpi

وهذا هو للطباعة، في الواقع.
لعرض استبدال نقطة في البوصة مع نقطة في البوصة، وكنت هناك.

لتلك (مثلي) التي لم تكن مألوفة مع بوصة:

inches = pixels / dpi
pixel = inches * dpi
1 centimeter = 0.393700787 inch
pixel = cm * 0.393700787  * dpi

وهذا الروتين وحساب حجم بكسل لعرض صورة X-سم على الشاشة.
ولكن على الطابعة، لم يكن لديك بهذه السهولة، لأنك لا تستطيع الحصول على DPI سهلا كما مؤشر أسعار المنتجين (bmp.HorizontalResolution وbmp.VerticalResolution).

public static int Cm2Pixel(double WidthInCm)
{
    double HeightInCm = WidthInCm;
    return Cm2Pixel(WidthInCm, HeightInCm).Width;
} // End Function Cm2Pixel


public static System.Drawing.Size Cm2Pixel(double WidthInCm, double HeightInCm)
{
    float sngWidth = (float)WidthInCm; //cm
    float sngHeight = (float)HeightInCm; //cm
    using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1, 1))
    {
        sngWidth *= 0.393700787f * bmp.HorizontalResolution; // x-Axis pixel
        sngHeight *= 0.393700787f * bmp.VerticalResolution; // y-Axis pixel
    }

    return new System.Drawing.Size((int)sngWidth, (int)sngHeight);
} // End Function Cm2Pixel

وأن استخدام مثل هذا التوجه:

public System.Drawing.Image Generate(string Text, int CodeSize)
        {
            int minSize = Cm2Pixel(2.5); // 100;
            if (CodeSize < minSize)
                CodeSize = minSize;

            if (string.IsNullOrEmpty(Text))
            {
                System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(CodeSize, CodeSize);

                using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(bmp))
                {

                    gfx.Clear(System.Drawing.Color.Black);
                    using(System.Drawing.Font fnt = new System.Drawing.Font("Verdana", 12, System.Drawing.FontStyle.Bold))
                    {
                        double y = CodeSize / 2.0 - fnt.Size;
                        gfx.DrawString("No Data", fnt, System.Drawing.Brushes.White, 5, (int)y, System.Drawing.StringFormat.GenericTypographic);
                    } // End Using fnt

                } // End using gfx

                return bmp;
            } // End if (string.IsNullOrEmpty(Text))

...[Generate QR-Code]
return [Generated QR-Code]
}

صيغ ملفات الصور مثل JPG TIFF لديك EXIF رأس والذي يحتوي على معلومات مثل الأفقي والرأسي نقطة في البوصة.

وبالتالي إذا كنت تحصل على صورة هذه البيانات ، يمكنك التحقق من للطباعة الحجم.

double DPC = Image_DPI * 0.393700787;

double widthInCm = Image_Width * DPC;
double heightInCm = Image_Height * DPC;

if (widthInCm <= 10 && heightInCm <= 6.88) // do stuff

إذا كنت بحاجة إلى تغيير حجم الصور على أن لا تتجاوز هذه للطباعة الأبعاد, يمكنك أن تفعل ذلك بطريقة أخرى ، وحساب DPI نسبة يتيح صورة الأبعاد W × H تدخل ضمن 10cm x 6.88 سم الحدود.

ونوع ما فريدريك قائلا: وأود أن تأخذ DPI لطيفة وتتطلب الصورة ليكون ذلك القرار أو أكبر (ولكن هو نفس نسبة الارتفاع) وعند تصدير / طباعة الصورة، تغيير حجم الصورة إلى DPI المستخدمة من قبل برنامج / طابعة أخرى ...

وقد تكون بسيطة مثل هذا: معظم الصور تخزين عدد بكسل لكل بوصة في نفوسهم. معرفة عدد البكسل في كل البعد من الصور الخاصة بك، وتقسيم ذلك من خلال عدد من بوصة (تحويل من سم). ثم استخدام البتات الأصلي، فقط تعديل الميداني لعدد من بكسل لكل بوصة (أو، وهو الأكثر شيوعا، نقطة في البوصة).

وهكذا صورتك يجب أن يكون 3.93 "س 2.71". إذا كانت صورتك هي 393px س 271px، هل تعيين نقطة في البوصة إلى 100x100. إذا كانت صورتك هي 39px س 27px، هل تعيين نقطة في البوصة إلى 10X10.

وعلى الرغم من أن ربما سيكون لديك للقيام ببعض تغيير حجم، كما أوضح إجابات أخرى. :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top