PDA

View Full Version : سوال: گذاشتن عکس در کادر متن.



Hamishebahar
جمعه 16 مهر 1389, 00:07 صبح
سلام دوستان چطوری میتونم توی کادر متنم هم متن بذارم هم عکس متحرک Gif بذارم؟
مرسی.

mahdi7s
جمعه 16 مهر 1389, 22:03 عصر
سلام

متاسفانه SL از فرمت gif پشتیبانی نمی کند اما:

1)اگر برنامه شما Out of browser باشد می توانید برای نمایش متن ها و عکس هایتان از کنترلر WebBrowser استفاده کنید.

2)می توانید از مبدل های XAML استفاده کنید(عکس تان را می دهید و XAML می گیرید)
برای مثال می توانید توضیحات AL to XAML را در لینک زیر ببینید:
http://www.mikeswanson.com/XAMLExport/

3)اگر انیمیشنی دارید می توانید از Blend یا Flash + to XAML Converter استفاده کنید

4)می توانید از کامپوننت های آماده استفاده کنید
http://www.componentone.com/SuperProducts/ImageSilverlight/

دیگر هم چیزی به ذهنم نمی رسد...

موفق باشید

taghvajou
جمعه 23 مهر 1389, 19:33 عصر
سلام به همه
و سلام به همیشه بهار و مهدی جان

تو نرم افزار فرم سازمون به این چنین امکانی نیاز داشتم.
بنده قبلا از ورژنهای یک و دو و حالا ورژن سه این جعبه ابزار (http://imagetools.codeplex.com/) استفاده کردم که هم رایگانه و هم سورسش هست و قابل تغییر! و البته دارای داکیومنت!!
اگه در استفاده اش راهنمایی و نیاز داشتین بنده در خدمتتون هستم.
http://imagetools.codeplex.com/

mahdi7s
یک شنبه 25 مهر 1389, 12:43 عصر
دمت گرم:تشویق:
به نظر می رسه از دیگر کامپوننت های غیر رایگان. هم عملکرد و امکانات و سرعت بالاتری در این زمینه ارائه کرده.

چند سوال برام پیش اومده:

1)چه جوری می تونم یک عکس gif را بوسیله ی این کامپوننت فقط با استفاده از XAML نمایش بدم؟

2)آیا در این کامپوننت کنترلری در زمینه نمایش متن(مثل RichTextBox) وجود داره که امکان نمایش کنترلر AnimatedImage خود این کامپوننت را داشته باشه؟(اگر هست لطفا مثال یا منبع مثالی را در صورت امکان بگذارید)

خیلی ممنون

mahdi7s
پنج شنبه 29 مهر 1389, 14:17 عصر
پس از کلی تحقیق و بررسی و امتحان متوجه شدم در این زمینه :
کامپوننت ImageTools بسیار ضعیف عمل می کنه و این هم به دلیل استفاده از Gif Decoder برای نمایش gif هست
در صورتی که کامپوننت C1Image که در پست 2 هم لینک سایتش رو دادم gif رو فریم به فریم نمایش میده و کلا کامپوننت های بسیار عالی ای در این زمینه ارائه کرده...

خودم هم اقداماتی برای ساخت این کامپوننت انجام دادم که در WPF کاملا کار کرد اما در SL مشکلاتی داشت که با دیدن کامپوننت توپ C1Image کلا بیخیال ادامه دادن شدم...

موفق باشید

taghvajou
پنج شنبه 29 مهر 1389, 14:40 عصر
سلام به همه
مهدی جان
میشه یه مقدار تخصصی و دقیق بگی که بسیار ضعیف عمل میکنه و بسیار عالی ارائه شده یعنی چی؟
ممنون میشیم یه مقدار جزئی تر بگی! اشکال استفاده از دکودر ؟ و تفاوتش با فریم به فریم نشون دادن؟

mahdi7s
پنج شنبه 29 مهر 1389, 17:51 عصر
با سلام

چه عجب جواب دادین...

از نظر من بحثی برای ضعیف بودن کامپوننت ImageTools وجود ندارد چون سازنده اش هم چندین جا (حتی در پاسخی که در جوابی در فروم MSDN هم داده بود...) مشکلات این کامپوننت را صریح گفته یک نمونه ی دیگرش را همین الان دیدم اگر به این لینک (http://imagetools.codeplex.com/SourceControl/changeset/changes/56210)بروید(این آپدیتیست که همین دیروز سازنده کامپوننت گذاشته...) یکی از کلاس هایی که آپدیت کرده AnimatedImage هست و در کامنتش هم نوشته از نسخه های قبلی استفاده نکنید!
مثلا من چندین تا از شکلک ها ی یاهو را امتحان کردم و هیچکدوم را نتونست نشون بده و در ضمن با XAML مشکل دارد همان سوال پست 4 که جوابی هم ندادید.
در صورتی که C1Image به راحتی اینکارو انجام میده.(شما یکبار امتحانش کنید منو درک می کنید:لبخند:)
-----------------------------------------------------------------------
اما گفتید کمی تخصصی بگم...

احتمالا می دانید که WPF هم مشکلاتی در نمایش gif دارد اما راه را بیشتر از SL باز گذاشته:
کلاس BitmapFrame (http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapframe.aspx) در WPF خصیصه ای دارد به نام Decoder.Frames که عکس انمیشنی که بهش داده میشه را به چندتا Frame تبدیل می کنه و حالا ما برای نمایش اون انمیشن باید با یک حلقه یکی یکی این Frame ها رو نمایش بدیم...
دقیقا مشکل اصلی ImageTools اینه که کلاس GifDecoder که در اون وجود داره نمی تونه یک gif رو درست decode و به چند frame تبدیل کنه(می توانید چندتا از شکلک های یاهو را امتحان کنید)
در صورتی که ComponentOne اینکارو خیلی عالی انجام میده(Decode کردن و تبدیل به Frame ) حتی اگر امتحانش کنید می بیند از BitmapFrame ای که در WPF هم موجود هست قوی تر عمل می کنه.

از نظر من بحث بیشتر در این مورد هیچ مشکلی را حل نمی کند مگر اینکه مشکل دیگری پدید آورد...

موفق باشید

taghvajou
پنج شنبه 29 مهر 1389, 19:59 عصر
سلام به همه
ممنون از توضیحتون
از اینکه دیردیر میتونم جواب بنویسم عذر میخوام. گاهی بعضی جوابها در حد چند خط توضیح کافیه که اون مواقع خدمت میکنم ولی گاهی نیاز به آماده کردن کد و مثال و عکسه که به خاطر شلوغی و تراکم کاری نمیتونم. و از این بابت از همه عذرخواهی میکنم

در پاسخ پست شماره چهار که امر کرده بودین یه مثال براتون بذارم هم با وجود نواقص ذکر شده بازهم اطاعت امر کرده و مثالی تهیه و تقدیم خواهم کرد.

mahdi7s
پنج شنبه 29 مهر 1389, 22:09 عصر
در پاسخ پست شماره چهار که امر کرده بودین یه مثال براتون بذارم هم با وجود نواقص ذکر شده بازهم اطاعت امر کرده و مثالی تهیه و تقدیم خواهم کرد.
ممنون که وقت می ذارید اما مشکلم حل شد...
خیلی ممنون

taghvajou
جمعه 30 مهر 1389, 07:00 صبح
سلام به همه
خوب خدا رو شکر
ولی با گذاشتن این مثال هم مشکل همیشه بهار (سازنده این تاپیک و سوال) و هم مشکل سایر دوستان هم حل میشه

AftaB66
دوشنبه 09 خرداد 1390, 11:07 صبح
سلام .
1-من از imagetools برای encode کردن عکسم و ذخیره تو دیتابیس استفاده کردم ، جواب داد ولی برای بازخوانی اونها از دیتابیس که از decode استفاده می کنم اصلا اطلاعات توی کنترل عکس لود نمیشه!!


MemoryStream stream ;
stream =
newMemoryStream(img_byte, 0, img_byte.Length, false);
stream .Seek(0,
SeekOrigin.Begin);
ImageTools.
ExtendedImage image = (ImageTools.ExtendedImage)sender;
ImageTools.IO.Jpeg.


JpegDecoder gdecode = new ImageTools.IO.Jpeg.JpegDecoder();


gdecode.Decode(image , stream);



این کد رو هم داخل ایونت لودینگ ExtendedImage مربوطه مینویسم.(البته بدون این ایونت هم جواب نداد!!!)


2- یه سوال استفاده از هر نوع دیکدری آزاده و فارغ از نوع عکس تبدیل به فرمت باینری شده است ؟
3- درآخر من برای لود عکس ذخیره شده در دیتابیسم از این روش استفاده میکنم. درسته؟


BitmapImage bitmapImg = newBitmapImage(image.UriSource);
WriteableBitmap wbitmap = newWriteableBitmap(bitmapImg.PixelWidth, bitmapImg .PixelHeight);

imgage.Source = wbitmap ;


البته باید بگم که decoder ها رو رجیستر کردم و از رجیستر شدش استفاده کردم باز هم نشد.

پیشاپیش ممنون از راهنماییتون (البته امیدوارم تو این تاپیک که خیلی وقته نوشته شده کسی باشه جواب منو بده )

AftaB66
دوشنبه 16 خرداد 1390, 09:30 صبح
جواب سوال 3 ام رو پیدا کردم : نمیشه چون زمانی از uriSource استفاده می کنیم که بخوایم عکسمون از یک Web Source لود بشه .
به این صورت هم نوشتم باز جواب نمیده !!
image با اکسپشن لود میشه !!!
void image_LoadingCompleted(object sender, EventArgs e)
{

Dispatcher.BeginInvoke(() =>
{
image = (ImageTools.ExtendedImage)sender;

});
}