كيفية تحديد CMYK الصور باستخدام C#
سؤال
لا أحد يعرف كيفية بشكل صحيح تحديد 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# نأمل أن يكون هذا يساعد شخص ما.
هتاف - جيريمي