C #: كيفية تحويل BITMAP صفيف بايت إلى صيغة JPEG؟

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

  •  19-08-2019
  •  | 
  •  

سؤال

وكيف يمكنني تحويل الصور النقطية في شكل صفيف بايت إلى صيغة JPEG باستخدام صافي 2.0؟

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

المحلول

ما هو نوع من byte[] تقصد؟ بيانات الملف تيار الخام؟ في هذه الحالة، وكيف حول شيء من هذا القبيل (باستخدام System.Drawing.dll في تطبيق العميل):

    using(Image img = Image.FromFile("foo.bmp"))
    {
        img.Save("foo.jpg", ImageFormat.Jpeg);
    }

وأو استخدام FromStream مع new MemoryStream(arr) إذا كنت حقا ديهم byte[]:

    byte[] raw = ...todo // File.ReadAllBytes("foo.bmp");
    using(Image img = Image.FromStream(new MemoryStream(raw)))
    {
        img.Save("foo.jpg", ImageFormat.Jpeg);
    }

نصائح أخرى

إذا كان مجرد مخزن مؤقت بيانات البكسل الخام، وليس ملف صورة كاملة (بما في ذلك رؤوس الخ، مثل JPEG) ثم لا يمكنك استخدام Image.FromStream.

وأعتقد أن ما كنت قد تبحث عن System.Drawing.Bitmap.LockBits، والعودة إلى System.Drawing.Imaging.ImageData. هذا يوفر الوصول إلى القراءة والكتابة بكسل الصورة باستخدام مؤشر إلى الذاكرة.

public static Bitmap BytesToBitmap(byte[] byteArray)
{
  using (MemoryStream ms = new MemoryStream(byteArray))
  {
    Bitmap img = (Bitmap)Image.FromStream(ms);
    return img;
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top