سؤال

أحاول تحويل ملف tiff ملون متعدد الصفحات إلى ملف c# CompressionCCITT3 tiff في C#.أدرك أنني بحاجة للتأكد من أن جميع وحدات البكسل هي 1 بت.لم أجد مثالاً مفيدًا على ذلك عبر الإنترنت.

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

المحلول

الدفع: http://bobpowell.net/onebit.htm

أنت بحاجة إلى هذا التحويل لأن CCITT3 وCCITT4 لا يدعمان اللون (إذا كنت أتذكر جيدًا).

نصائح أخرى

إخلاء المسؤولية عن القوادة:أعمل ل أتالاسوفت, ، وهي الشركة التي تصنع برامج التصوير .NET.

استخدام dotImage, ، تصبح هذه المهمة مثل هذا:

FileSystemImageSource source = new FileSystemImageSource("path-to-your-file.tif", true); // true = loop over all frames
// tiff encoder will auto-select an appropriate compression - CCITT4 for 1 bit.
TiffEncoder encoder = new TiffEncoder();
encoder.Append = true;

// DynamicThresholdCommand is very good for documents.  For pictures, use DitherCommand
DynamicThresholdCommand threshold = new DynamicThresholdCommand();

using (FileStream outstm = new FileStream("path-to-output.tif", FileMode.Create)) {
    while (source.HasMoreImages()) {
        AtalaImage image = source.AcquireNext();
        AtalaImage finalImage = image;
        // convert when needed.
        if (image.PixelFormat != PixelFormat.Pixel1bppIndexed) {
            finalImage = threshold.Apply().Image;
        }
        encoder.Save(outstm, finalImage, null);
        if (finalImage != image) {
            finalImage.Dispose();
        }
        source.Release(image);
    }
}

يعد مثال بوب باول جيدًا، بقدر ما يتعلق الأمر، ولكنه يحتوي على عدد من المشكلات، ليس أقلها أنه يستخدم حدًا بسيطًا، وهو أمر رائع إذا كنت تريد السرعة ولا تهتم فعليًا بمخرجاتك يبدو أو أن مجال الإدخال الخاص بك هو في الواقع أبيض وأسود إلى حد كبير - ممثل فقط بالألوان.الثنائية هي مشكلة صعبة.عندما تكون مهمتك هي تقليل المعلومات المتاحة بمقدار 1/24، فإن كيفية الاحتفاظ بالمعلومات الصحيحة والتخلص من الباقي يمثل تحديًا.يحتوي DotImage على ستة أدوات مختلفة (IIRC) للتحويل الثنائي.SimpleThreshold هو الجزء السفلي من البرميل، من وجهة نظري.

أقترح تجربة النتائج المرجوة أولاً باستخدام الأدوات المساعدة للملف والصور قبل الغوص في عملية الترميز.وجدت كبار الشخصيات لتكون أداة مفيدة.الخيار التالي هو النظر في ما يمكن أن يفعله LibTIFF.لقد حصلت على نتائج جيدة مع البرنامج المجاني ليب تيف.نيت باستخدام C# (انظر أيضًا com.stackoverflow).لقد شعرت بخيبة أمل كبيرة بسبب وظيفة GDI tiff، على الرغم من أن المسافة المقطوعة قد تختلف (أحتاج إلى تدرج الرمادي 16 بت المفقود).كما يمكنك استخدام ليبتيف المرافق (أييرى http://www.libtiff.org/man/tiffcp.1.html)

لقد رأيت الكود أعلاه، ويبدو أنه يقوم بتحويل كل بكسل باستخدام المنطق اليدوي.

هل هذا مناسب لك؟

نظام الواردات.الرسم.التصوير

'احصل على ملف tif الملون

تعتيم bmpColorTIF كخريطة نقطية جديدة ("C:\color.tif")

"حدد منطقة tif (سيتم الاستيلاء على جميع الإطارات)

خافت rectColorTIF كمستطيل جديد (0، 0، bmpColorTIF.Width، bmpColorTIF.Height)

'استنساخ المستطيل كـ tif ملون 1 بت

خافت bmpBlackWhiteTIF كصورة نقطية = bmpColorTIF.Clone(rectColorTIF, PixelFormat.Format1bppIndexed)

'افعل ما تريد باستخدام الصورة النقطية الجديدة (حفظ، وما إلى ذلك)

...

ملحوظة:هناك الكثير من تنسيقات البكسل للاختيار من بينها.

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