PDA

View Full Version : سوال: تبدیل تصاویر به Base64



pilot1900
سه شنبه 11 فروردین 1394, 18:32 عصر
سلام من میخوام تصاویر رو به رشتهBase64 تبدیل کنم و به این کد بر خورد کردم اما هر کاری میکنم تو تکست باکس چیزیرو نشون نمیده و کلاسش کار نمیکنه .
راهنمایی لطفا.

public string ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();


// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}

pilot1900
سه شنبه 11 فروردین 1394, 18:34 عصر
درضمن با این کد فراخوانی کردم .

string Image =ImageToBase64(pictureBox1.Image, System.Drawing.Imaging.ImageFormat.Jpeg);

am_al_59
سه شنبه 11 فروردین 1394, 20:35 عصر
از کنترل RichTextBox به جای TextBox استفاده کن

pilot1900
چهارشنبه 12 فروردین 1394, 01:59 صبح
هنگ میکنه برنامه هیچ اروری هم نداره

richTextBox1.Text= ImageToBase64(pictureBox1.Image, System.Drawing.Imaging.ImageFormat.Jpeg);

am_al_59
چهارشنبه 12 فروردین 1394, 22:21 عصر
دلیل اینکه توی TextBox نشون نمیده اینه که میخواد متن رو wrap کنه و باهوشه (که اینجا شر میشه)
گفتم از richtextBox استفاده کنی چون این کنترل قابلیت پردازش متون rtf که دارای تگ های کنترلی هستن و شاید هم حجیم باشن رو داره و روی خود متن زیاد دقت نمیکنه و بر اصل تگ ها عمل میکنه
برای RichTextBox
خاصیت MultiLine را روی True بزار
خاصیت WordWrap راهم False کن

pilot1900
چهارشنبه 12 فروردین 1394, 23:26 عصر
ok شد هنگ کردنش به دلیل حجم عکس بود . اما بازهم کنده با اینکه حجم عکسرو پائین آوردم . راهی نداره سرعت پردازشش رو بالا برد؟

am_al_59
چهارشنبه 12 فروردین 1394, 23:31 عصر
من تا حالا نیازی نداشتم که این کارو انجام بدم برای همین قبل از اینکه پست اولمو بزنم یک برنامه نمونه نوشتم تا مطمئن بشم و مشکل شمارو دقیقاً دیدم و با اون کارها که گفتم حل شد البته عکسی که تست کردم حجمش کم بود در حد 30K
الان مشکل با سرعت تبدیل stream به base64 هست یا با سرعت قرار گیری رشته در richbox؟
اگر حجم تصویرتونو بفرمایین من یک برنامه نمونه مینویسم میفرستم امیدوارم بتونم کمکی بکنم

pilot1900
چهارشنبه 12 فروردین 1394, 23:44 عصر
با سرعت قرار گیری رشته در richbox طوله رشتش واقعا زیاده
400K حدودا حجم عکسه

am_al_59
پنج شنبه 13 فروردین 1394, 00:17 صبح
این سورس برنامه نمونه با عکس بالای 600k روی دستگاه من سریع اجرا میشه البته سیستمم i7 2600 با 16GB رمه :بامزه:
http://uplod.ir/elpl0ohc7ybq/WindowsFormsApplication10.rar.htm

اینم فایل کامپایل شدش
http://s6.picofile.com/file/8180234992/WindowsFormsApplication10.zip.html


اما فکر نکنم با این حجم ها ربطی به سیستم داشته باشه
اگر هنوزم مشکل سرعت داشتی برنامه رو در حالت Release بیلد کن
ویزوال استودیو رو ببند و نسخه Release رو اجرا کن ببین حل میشه

pilot1900
پنج شنبه 13 فروردین 1394, 01:08 صبح
برنامه اوکی هست نیاز به یک thread داره اونو بزنم 100٪ اوکی میشه.CPUمن پائینه:گریه:

am_al_59
پنج شنبه 13 فروردین 1394, 03:47 صبح
خب اینم یک روششه اما به نظر شخصی من فقط نمایش رشته دلیل مناسبی برای ایجاد یک Thread نیست
برات جستجو کردم و این لینک ها رو پیدا کردم
http://stackoverflow.com/questions/2091914/how-can-i-add-a-huge-string-to-a-textbox-efficiently
http://stackoverflow.com/questions/3427600/writing-huge-amounts-of-text-to-a-textbox
توی لینک اول به این موضوع اشاده کرده که notePad ویندوز و TextBox برای متن هایی با حداکثر حجم 64K بهینه شدن و بهتره برای متون بزرگتر از RichTextBox استفاده بشه
این عبارتی هست که میتونی تو گوگل جستجو کنی و به کلی جواب برسی
show huge string in textBox
البته من همچنان معتقدم وقتی برنامت Release بشه خیلی از مشکلاتی که با سرعت در حالت Debug داری برطرف میشه

pilot1900
پنج شنبه 13 فروردین 1394, 13:22 عصر
اگر توجه کنید من دارم یه عکس رو به رشته تبدیل میکن در این حین پردازش بسیار بالا میره و برنامه در حالت هنگ میره برای رفع این مورد تنها راه
Thread میتونه باشه. اگر راه حل دیگه ای هست راهنمایی کنید.
و Thread رو به یک ProgressBar متصل میکنیم که در این حین progressBar کار کنه .

plus
پنج شنبه 13 فروردین 1394, 17:31 عصر
اول اینکه منطقی به نظر نمیاد که شما عکس رو به یک رشته base64 تبدیل کنید و به کاربر نمایش بدین. این اطلاعات چیزی نیست که کاربر با دیدن اونها بتونه از اونها سر در بیاره. همونطور که خودتون متوجه شدین حجم پردازش مربوط به نمایش یک متن بسیار طولانی در TextBox خیلی بالا میره و با هنگی مواجه میشین. بعیده که تبدیل عکس به base64 عامل تاخیر باشه. عامل تاخیر، نمایش متن طولانی در TextBox هست و از اونجایی که این پردازش در UI Thread ایجاد میشه، عملی نیست که بتونید در Thread دیگه انجامیش بدین و Progress Bar بگذارین...
شاید اگه بجای TextBox از label استفاده کنید مناسب تر باشه و در مدت کوتاه تری نمایش پیدا کنه. بعید میدونم کاربر بخواد متن base64 رو مستقیما رو تغییر بده.