C #: كيفية تحويل BITMAP صفيف بايت إلى صيغة JPEG؟
سؤال
وكيف يمكنني تحويل الصور النقطية في شكل صفيف بايت إلى صيغة 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;
}
}
لا تنتمي إلى StackOverflow