সি শার্প ব্যবহার করে, সেখানে উইন্ডোজ রূপান্তর করতে একটি ভাল উপায় নেই Bitmapএকটি থেকে byte[]একটি অস্থায়ী ফাইল সংরক্ষণ এবং ব্যবহার ফলাফলের পড়া চেয়ে FileStream?
সি শার্প ব্যবহার করে, সেখানে উইন্ডোজ রূপান্তর করতে একটি ভাল উপায় নেই Bitmapএকটি থেকে byte[]একটি অস্থায়ী ফাইল সংরক্ষণ এবং ব্যবহার ফলাফলের পড়া চেয়ে FileStream?
উত্তর:
কয়েকটি উপায় আছে।
ImageConverter
public static byte[] ImageToByte(Image img)
{
ImageConverter converter = new ImageConverter();
return (byte[])converter.ConvertTo(img, typeof(byte[]));
}
এটি একা সুবিধাজনক কারণ এর জন্য প্রচুর কোডের প্রয়োজন হয় না।
মেমরি স্ট্রিম
public static byte[] ImageToByte2(Image img)
{
using (var stream = new MemoryStream())
{
img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
return stream.ToArray();
}
}
ফাইলটি ডিস্কের পরিবর্তে মেমরিতে সংরক্ষণ করা ছাড়া এটি আপনি যা করছেন তার সমতুল্য। যদিও আরও কোড আপনার কাছে ইমেজ ফর্ম্যাট করার বিকল্প রয়েছে এবং এটি মেমরি বা ডিস্কে সংরক্ষণের মধ্যে সহজেই সংশোধন করা যেতে পারে।
ImageConverterপদ্ধতিটি Png হিসাবে চিত্রটি সংরক্ষণ করবে, যার ফলে বিশাল ফাইল।
ImageConverterআপনি যে নেট মান ব্যবহার করতে পারেন তা নয়MemoryStream
একটি মেমরিস্ট্রিম এটির জন্য সহায়ক হতে পারে। আপনি এটি একটি এক্সটেনশন পদ্ধতিতে রাখতে পারেন:
public static class ImageExtensions
{
public static byte[] ToByteArray(this Image image, ImageFormat format)
{
using(MemoryStream ms = new MemoryStream())
{
image.Save(ms, format);
return ms.ToArray();
}
}
}
আপনি কেবল এটির মতো ব্যবহার করতে পারেন:
var image = new Bitmap(10, 10);
// Draw your image
byte[] arr = image.ToByteArray(ImageFormat.Bmp);
আমি চিত্রাঙ্কনকারীর প্রসঙ্গে prestomanifto এর উত্তরের সাথে আংশিকভাবে একমত নই। ইমেজকনভার্টার ব্যবহার করবেন না। এটিতে প্রযুক্তিগতভাবে কোনও ভুল নেই, তবে কেবলমাত্র এটি সত্য যে এটি বক্স / আনবক্সিং অবজেক্ট থেকে ব্যবহার করে তা আমাকে। নেট ফ্রেমওয়ার্কের পুরানো অন্ধকার স্থানগুলির কোড এবং এটি চিত্র প্রক্রিয়াকরণের সাথে ব্যবহার করার জন্য আদর্শ নয় (এটি বাইটে রূপান্তরিত করার জন্য ওভারকিল) [] কমপক্ষে), বিশেষত যখন আপনি নিম্নলিখিতগুলি বিবেচনা করেন।
ImageConverter। নেট ফ্রেমওয়ার্ক দ্বারা ব্যবহৃত কোডটি আমি একবার দেখেছিলাম এবং অভ্যন্তরীণভাবে এটি আমার উপরে সরবরাহ করা কোডের মতো প্রায় একই রকম কোড ব্যবহার করে। এটি একটি নতুন তৈরি করে MemoryStream, Bitmapআপনি যখন সরবরাহ করেছিলেন তখন এটি যে আকারে ছিল সেটিকে সংরক্ষণ করে এবং অ্যারেটি ফিরিয়ে দেয়। ImageConverterব্যবহার করে ক্লাস তৈরির অতিরিক্ত ওভারহেড ছেড়ে যানMemoryStream
আপনি কেবল মার্শালও করতে পারেন the বিটম্যাপের ডেটা অনুলিপি করুন। কোনও মধ্যস্থতাকারী স্মৃতিপ্রবাহ ইত্যাদি নেই এবং একটি দ্রুত মেমরির অনুলিপি। এটি 24-বিট এবং 32-বিট বিটম্যাপ উভয় ক্ষেত্রেই কাজ করা উচিত।
public static byte[] BitmapToByteArray(Bitmap bitmap)
{
BitmapData bmpdata = null;
try
{
bmpdata = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat);
int numbytes = bmpdata.Stride * bitmap.Height;
byte[] bytedata = new byte[numbytes];
IntPtr ptr = bmpdata.Scan0;
Marshal.Copy(ptr, bytedata, 0, numbytes);
return bytedata;
}
finally
{
if (bmpdata != null)
bitmap.UnlockBits(bmpdata);
}
}
।
মেমোরিস্ট্রিমে চিত্রটি সংরক্ষণ করুন এবং তারপরে বাইট অ্যারেটি ধরুন।
http://msdn.microsoft.com/en-us/library/ms142148.aspx
Byte[] data;
using (var memoryStream = new MemoryStream())
{
image.Save(memoryStream, ImageFormat.Bmp);
data = memoryStream.ToArray();
}
System.Drawing.Image (দেখুন: ডকস.মাইক্রোসফটকম / ইয়েন / ডটনেট / এপি / ২ )
System.Drawing.Image does not exist। সুতরাং .. না, কাজ করে না :(
এর MemoryStreamপরিবর্তে এর পরিবর্তে একটি ব্যবহার করুন FileStream:
MemoryStream ms = new MemoryStream();
bmp.Save (ms, ImageFormat.Jpeg);
byte[] bmpBytes = ms.ToArray();
ToArray, না GetBuffer।
Note that the buffer contains allocated bytes which might be unused. For example, if the string "test" is written into the MemoryStream object, the length of the buffer returned from GetBuffer is 256, not 4, with 252 bytes unused. To obtain only the data in the buffer, use the ToArray method.সুতরাং এখন থেকে বাইট অ্যারে GetBufferচিত্রটি প্লাস অব্যবহৃত বাইটগুলি ফিরিয়ে দেবে, যার ফলস্বরূপ সম্ভবত কোনও দূষিত চিত্র দেখা যাবে।
নিম্নলিখিত চেষ্টা করুন:
MemoryStream stream = new MemoryStream();
Bitmap bitmap = new Bitmap();
bitmap.Save(stream, ImageFormat.Jpeg);
byte[] byteArray = stream.GetBuffer();
আপনি ব্যবহার করছেন তা নিশ্চিত করুন:
System.Drawing & using System.Drawing.Imaging;
MemoryStream ms = new MemoryStream();
yourBitmap.Save(ms, ImageFormat.Bmp);
byte[] bitmapData = ms.ToArray();
খুবই সাধারণ:
return (byte[])System.ComponentModel.TypeDescriptor.GetConverter(pImagen).ConvertTo(pImagen, typeof(byte[]))
খুব সহজ একটি লাইনে এটি ব্যবহার করুন:
byte[] imgdata = File.ReadAllBytes(@"C:\download.png");