كيف يمكنني أخذ صفيف بايت من صورة TIFF وتحويلها إلى النظام.الرسم.صورة كائن ؟

StackOverflow https://stackoverflow.com/questions/32750

  •  09-06-2019
  •  | 
  •  

سؤال

لدي byte[] مجموعة المحتويات التي تمثل ملف TIFF (كما في ، إذا أنا أكتب هذه بايت مباشرة إلى ملف باستخدام BinaryWriter كائن أشكال صالحة تماما ملف TIFF) و أنا أحاول أن تتحول إلى نظام.الرسم.صورة الكائن بحيث لا يمكن استخدامه في وقت لاحق التلاعب (التغذية إلى TIFF متعددة الصفحات كائن)

المشكلة أواجه هو أن المتعارف رمز لهذه المهمة:

    public Image byteArrayToImage(byte[] byteArrayIn)
    {
        MemoryStream ms = new MemoryStream(byteArrayIn);
        Image returnImage = Image.FromStream(ms, true);
        return returnImage;
    }

لا يعمل بالنسبة لي.السطر الثاني من الطريقة المذكورة أعلاه حيث يدعو Image.FromStream طريقة يموت في وقت التشغيل ، قائلا

Parameter Not Valid

وأعتقد أن الأسلوب هو الاختناق على حقيقة أن هذا هو ملف TIFF ولكن أنا لا يمكن معرفة كيفية جعل FromStream طريقة قبول هذه الحقيقة.

كيف يمكنني تشغيل صفيف بايت من صورة TIFF إلى صورة الكائن ؟

أيضا كما قلت الهدف النهائي من هذا هو أن يكون صفيف بايت يمثل TIFF متعددة الصفحات الملف الذي يحتوي على ملفات TIFF التي لدي صفيف بايت الكائنات من الآن.إذا كان هناك طريقة أفضل بكثير من أن تذهب عن القيام بذلك ، أنا كل ذلك.

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

المحلول

تحرير: افتراض أدناه ليست صحيحة ، كانت لدي فرصة لاطلاق النار حتى بلدي IDE في وقت لاحق واختبارها مع وبدون كتابة كل من يسكنها MemoryStream بشكل صحيح.

أعتقد أنك تحتاج إلى كتابة إلى MemeoryStream الأولى.

كما لو ذاكرتي (لا يقصد التورية) يخدم معي بشكل صحيح هذا:

MemoryStream ms = new MemoryStream(byteArrayIn);

يخلق الذاكرة تيار من هذا الحجم.

ثم تحتاج إلى كتابة صفيف بايت محتويات الذاكرة تيار:

ms.Write(byteArrayIn, 0, byteArrayIn.Length);

انظر إذا كان يصلح له.

نصائح أخرى

حسنا, لقد وجدت هذه المسألة ، وكان من جزء من رمز لا علاقة لها جزء من التعليمات البرمجية كنت تسأل عن.البيانات التي يتم تمريرها كسلسلة كنت تحويلها إلى صفيف بايت (هذا كان اختبار إذا كنت في محاولة لمحاكاة صفيف بايت في التطبيق الرئيسي) ، ثم تحويل ذلك إلى MemoryStream ، ثم جعل صورة من ذلك.

ما لم ندرك أن السلسلة كانت ترميز Base64.الدعوة Convert.FromBase64String() سبب ذلك أن تتحول إلى صفيف بايت التي لن تقتل Image.FromStream() الأسلوب.

وذلك أساسا المغلي إلى خطأ غبي من جهتي.ولكن يا رمز أعلاه لا تزال مفيدة و هذه الصفحة ربما تكون بمثابة جوجل النتيجة كيفية تجنب هذا الخطأ إلى شخص آخر.

أيضا, لقد وجدت طريقة سهلة لبناء Multi-Page TIFF من صفائف بايت هنا.

كل هذه القرائن التي ساعدتني في معرفة مشكلتي والتي كانت نفس المشكلة السؤال يسأل.لذلك أريد ما الحل الذي وصلت لأن هذه القرائن مفيدة.شكرا على كل القرائن التي نشرت حتى الآن!

كما سوندرز وشارك في جوابه أن أسلوب الكتابة بالفعل كتابة بايت الذاكرة تيار أساسي.وكان هذا اول خطأ.

ثم بياناتي كان سيئا TIFF البيانات أيضا, ولكن في حالتي ، كان الزائدة 13 في بداية حياتي بيانات الصورة.مرة أزلت أن كل شيء على ما يرام بالنسبة لي.

عندما قرأت عن بعض الأساسية TIFF تنسيق ملف المواصفات ، وجدت أن ملفات TIFF يجب أن تبدأ مع الثاني أو مم (اثنين بايت مع قيم إما 73 أو 77).الثاني يعني endian طفيف ترتيب البايت ('إنتل بايت يأمر') يستخدم.مم يعني كبيرة تنتهي ('موتورولا بايت يأمر') يستخدم.المقبلين بايت اثنين بايت قيمة عدد صحيح ( = Int16 في .صافي) 42 الثنائية 101010.

وبالتالي الصحيح TIFF تيار بايت يبدأ مع العشرية بايت القيم:73, 73, 42, 0 أو 77 ، 77, 0, 42.أنا أشجع أي شخص لديه نفس المشكلة التي عانينا لمعاينة TIFF البيانات تيار بايت و التأكد من البيانات الخاصة بك صالحة TIFF البيانات!

شكرا, الكراهية و تيم ساندرز!!

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