سؤال

لا أحد يعرف كيفية بشكل صحيح تحديد CMYK الصور باستخدام C# ؟ لقد وجدت كيفية القيام بذلك باستخدام يماغيماغيك ، ولكن أريد .صافي الحل.لقد وجدت 3 مقتطفات الشفرة على الانترنت واحد فقط يعمل في ويندوز 7 لكن كل فشل في نظام التشغيل Windows Server 2008 المزود بحزمة الخدمة SP2.أنا بحاجة إلى العمل على الأقل في نظام التشغيل Windows Server 2008 المزود بحزمة الخدمة SP2.هنا هو ما وجدته:


    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Drawing;
    using System.Drawing.Imaging;

    bool isCmyk;

    // WPF
    BitmapImage wpfImage = new BitmapImage(new Uri(imgFile));

    // false in Win7 & WinServer08, wpfImage.Format = Bgr32
    isCmyk = (wpfImage.Format == PixelFormats.Cmyk32);

    // Using GDI+
    Image img = Image.FromFile(file);

    // false in Win7 & WinServer08
    isCmyk = ((((ImageFlags)img.Flags) & ImageFlags.ColorSpaceCmyk) == 
        ImageFlags.ColorSpaceCmyk); 

    // true in Win7, false in WinServer08 (img.PixelFormat = Format24bppRgb) 
    isCmyk = ((int)img.PixelFormat) == 8207; 
هل كانت مفيدة؟

المحلول

لا تبدأ مع BitmapImage ك طريقة تحميل البيانات.في الواقع ، لن تستخدم على الإطلاق هذا.بدلا وأود أن استخدام BitmapDecoder::Create و تمر في BitmapCreateOptions.PreservePixelFormat.ثم يمكنك الوصول إلى BitmapFrame كنت ترغب في التحقق من Format الممتلكات التي ينبغي الآن أن العائد CMYK.

ثم, إذا كنت حقا بحاجة إلى عرض صورة, يمكنك فقط تعيين BitmapFrame, الذي هو أيضا BitmapSource فئة فرعية ، Image::Source.

نصائح أخرى

نتائج الاختبار هي مختلفة قليلا من يدكم.

  • ويندوز 7:
    • ImageFlags:ColorSpaceRgb
    • PixelFormat:PixelFormat32bppCMYK (8207 درجة)
  • ويندوز سيرفر 2008 R2:
    • ImageFlags:ColorSpaceRgb
    • PixelFormat:PixelFormat32bppCMYK (8207 درجة)
  • نظام التشغيل Windows Server 2008:
    • ImageFlags:ColorSpaceYcck
    • PixelFormat:Format24bppRgb

التعليمة البرمجية التالية يجب أن تعمل:

    public static bool IsCmyk(this Image image)
    {
        var flags = (ImageFlags)image.Flags;
        if (flags.HasFlag(ImageFlags.ColorSpaceCmyk) || flags.HasFlag(ImageFlags.ColorSpaceYcck))
        {
            return true;
        }

        const int PixelFormat32bppCMYK = (15 | (32 << 8));
        return (int)image.PixelFormat == PixelFormat32bppCMYK;
    }

أنا واجهت نفس القضايا و إذا كان الخاص بك باستخدام .net 2.0 ثم BitmapDecoder لا تعمل..ما تريد القيام به هو قراءة ملف عادي فقط تحقق لمعرفة ما بايت أقول الملف.. كيفية التعرف على صور CMYK في ASP.NET باستخدام C# نأمل أن يكون هذا يساعد شخص ما.

هتاف - جيريمي

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