# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > Silverlight >  مسیر عکس در silverlight

## mohammad meta

سلام 
بچه ها  کسی می تونه به من یاد بده تو silverlight چجوری  مسیر image را باید به image source بدیم ؟من وقتی این مینویسم از میسر عکس error میگیره.
      
Image img = newImage(); img.VerticalAlignment = VerticalAlignment.Center; img.HorizontalAlignment = HorizontalAlignment.Center; img.Source = @"C:\New folder\TransportationHelp0076.jpg";

----------


## taghvajou

سلام به همه
خدمت عرض کنم که alh باید بعد از اضافه کردن تصویر به سالوشن مسیر بدی، یعنی ADDnewItem  کن بعد آدرس نسبی بدین.

اما یه نکته دیگه که ممکنه بهش بربخورین که وقتی آدرس نسبی تو ایمیج سورس تو زمل (XAML) بدی،
تصویر نمایان میشه ولی اگه همین مسیر از سالوشن تو سورس بدین، نتیجه بخش نیست.

علتش اینکه که ایمیج سورس در واقع باید از یه بیت مپ ایمیج تغذیه بشه. 
وقتی شما تو زمل (XAML) آدرس تصویر تو سالوشن رو میدین، خودش یه نمونه از بیت مپ ایمیج درست میکنه و آدرس (Uri) را فید میکنه و تولید کرده و بعد در سورس اون ایمیج میریزه!

یه

----------


## mohammad meta

ببین دوست عزیز من وقتی 10 تا عکس 500 mg ای را به image برنامه Add می کنم زمان کامپایل error کمبود storage  میده من نمی دونم دلیلش چیه ؟
شما می دونید ؟لطفا راهنمایی کنید.

----------


## taghvajou

فی الواقع، این یکی از نقص و ضعفهای کاربردی سیلورلایته! البته ناشی از WCF-silverlight-enabled میشه! 

نه فقط تو عکس، بلکه شما اگه یهو بخوای یه ماهیت درشت با چندین ویژگی مثلا مشخصات کاربر (مثلا با 30 تا پراپرتی) رو هم از دیتابیس بکشی، می بینی که بیش از پونصد و ششصد تا نمیتونه!

چه برسه اونهمه عکس با حجم بالا!

یک کلاس بنویس و مسئول لود رو متناسب با حجم به اون کلاس بسپار که چند تا چند تا ویا حتی یکی یکی واشکی کنه و بهت تو سیلورلایت تحویل بده!

متاسفانه این مشکل رو نمیشه حل کرد باید دورش بزنی!

----------


## taghvajou

ولی محمد، من هنوز نظرم بر اینه که راهنمای برنامه تو به جای اینکه به عکس تبدیل کنی و عکسها رو بخوای لود کنی، *از متن یا اچ تی ام ال استفاده کنی*، سبکتر و مهندسی تره! با قابلیت پرینت و انتقال و سبک!

----------


## mohammad meta

ممنون 
منم خواستم همین کار را انجام دهم .یعنی در زمان runtime دونه دونه عکس بهش بدم ولی متاسفانه هر کاری می کنم مسیر فایل ایراد میگیره .
نمی دونم در silver light مسیر نسبی چه جوری میدن
 به دلیل اینکه من تازه با silverlight  آشنا شدم اصلا نمی دونم عکس را چجوری به صورت dynamic به پروپه addکنم اگه شما راهنماییم کنید خیلی خیلی ممنون میشم.

----------


## taghvajou

یه بار دیگه با دقت بخون پست قبلیمو!

----------


## taghvajou

لود عکس و غیره، سرجاش! 
ولی برای راهنما (Help) از این روش استفاده نکن!

----------


## mohammad meta

> ولی محمد، من هنوز نظر بر اینه که راهنمای برنامه تو به جای اینکه به عکس تبدیل کنی و عکسها رو بخوای لود کنی، از متن یا اچ تی ام ال استفاده کنی، سبکتر و مهندسی تره! با قابلیت پرینت و انتقال و سبک!


دوست خوب من شما قرار شد به من آموزش بدید آموزش ندادید منم مجبور شدم از این راه استفاده کنم.
ضمنا وقتی فایل word را به  html تبدیل می کنم زیبایی نوشته ،font ، image از بین میره 
راهی برای بر طرف کردن این مشکل هست ؟

----------


## taghvajou

گل پسر! من که هنوز نمردم که میگی قرار *بــــــــــــود*!
واسه اموزش باید با حوصله بشینم، عکس و کد آماده کنم! چشم! امروز تقدیم میکنم.

عجله کار شیطونه! اول خوب مهندسی کن کارتو بعد به کار بگیر!

دوم اینکه
علی القاعده تو تبدیل ورد به اچ تی ام ال نباید چنین اتفاقی بیفته! چرا که تمام پراپرتیهای کلاسهای تکست بلاک و سایر اشیا موجود تو ورد هستند، تو تکهای اچ تی ام ال هم پیدا میشند! میخوای یک از اینترنت یه کانورتور یپدا کن و قال قضیه رو بکن!

ولی اگه بازهم میگی نه! یه کاری کن ! فایل ووردتو به پی دی اف تبدیل کن تا پی دی اف رو لود کنیم.

در مجموع توصیه میکنم از اینترنت نرم افزار AdobeRoboHelp رو دانلود کنی که هر چی میخوای داره! الان آخرین ورژنش 8 است.

اگه نتونستی پیدا کنی، امر کنی واست آپلود میکنم و آدرسشو میذارم واستون!
راضی شدی؟
حالا دیگه اخم نکن :قلب:

----------


## mohammad meta

دوست عزیز من از یک  component که از اینجا دانلود شده استفاده کردم 
http://www.componentone.com/SuperPro...okSilverlight/

حالا این component هر page را به صورت یک object میگیره و نمایش میده .
من اگه هر صفحه word را به یک html file تبدیل کنم چهجوری میتونم html را یا به صورت xaml یا معمولی
به این page add کنم ؟

----------


## taghvajou

پس لطفا صبر کن بذار کمپوننت رو دانلود کنم و مطالعه اش کنم.

----------


## mohammad meta

دست گلت درد نکنه .اگه بشه pdf به هر page اضافه کنیم که عالیه ؟

----------


## hezare

void data_Select_Top_albumCompleted(object sender, Select_Top_albumCompletedEventArgs e)
{

System.Collections.ObjectModel.ObservableCollectio  n<string> lst = (System.Collections.ObjectModel.ObservableCollecti  on<string>)e.Result;


 

string imgUri10 = "http://نام سایت/" + list[8];
aks10.Source = new BitmapImage(newUri(imgUri10, UriKind.RelativeOrAbsolute));

----------


## taghvajou

سلام به همه و خدمت جناب هزاره

بخش دوم جوابتون درسته! ممنون. ولی
در مورد کاربرد اون آبزروال کالکشنی که تو پاسختون دادین یه توضیح لطف میکنین؟
علی الظاهر شما یه تابعی ای داشتین به نام ( data_Select_Top_albumَASync()) که در انتهای اجرای کار رویداد اتمامش شده متدا بالایی که مقدار نتیجه متد یعنی همون (e.result) رو تو یه آبزروال کالکشن از *رشته* ریختین. ولی سوالی که مطرحه این کالکشن رو واسه چی ساختین و کجا استفاده کردین؟ و مهمتر این که چرا یه کالکشن از رشته؟؟؟!!!

البته حدس میزنم شما تو کپی کردن سورس، یه چند خط رو اضافه آوردین!

----------


## hezare

سلام جناب تقواجو

من یه متد داشتم به اسم Select_Top_album() که البته خروجی متد از نوع لیست هست .. حتما میدونید که WCF فقط لیست Generic رو میفهمه و برای همین از bservableCollection استفاده کردم ..
نتیجه این آلبوم رو می تونید در آدرس زیر ببینید :
http://english.iribnews.ir/PhotoAlbum.aspx

موفق باشید

----------


## taghvajou

بله متوجه هستم. ولی سوال این بود که در واقع تابعی که لیست آلبوم های برتر رو فراخوانی میکرده؟ و ارتباط این تابع به نمایش عکس؟

ضمنا کار قشنگی بود! دستتون درد نکنه!

----------


## hezare

متوجه نمی شم ؟!

یعنی من متد رو براتون بنویسم ؟ من یک سری آدرس عکس رو از دیتابیس می خونم تو یه لیست میریزم و از تو فولدر نمایش میدم ..
خواهش می کنم
آیا توضیحم کافی و قانع کننده بود؟

----------


## taghvajou

> ممنون 
> منم خواستم همین کار را انجام دهم .یعنی در زمان runtime دونه دونه عکس بهش بدم ولی متاسفانه هر کاری می کنم مسیر فایل ایراد میگیره .
> نمی دونم در silver light مسیر نسبی چه جوری میدن
>  به دلیل اینکه من تازه با silverlight  آشنا شدم اصلا نمی دونم عکس را چجوری به صورت dynamic به پروپه addکنم اگه شما راهنماییم کنید خیلی خیلی ممنون میشم.


آقا محمد! نحوه به کار گرفتن عکس رو تو تاپیک آموزش گذاشتم ها! اگه خواستی یه سر بزن!

https://barnamenevis.org/showth...22#post1053322

----------


## hezare

متوجه نمی شم ؟!

یعنی من متد رو براتون بنویسم ؟ من یک سری آدرس عکس رو از دیتابیس می خونم تو یه لیست میریزم و از تو فولدر نمایش میدم ..
خواهش می کنم
آیا توضیحم کافی و قانع کننده بود؟

----------


## taghvajou

گرفتم! یعنی شما به جای اینکه اصل عکس رو تو پایگاه داده نگه دارین، پث اونا رو دارین و به خورد یو آر آی بیت مپ دادین!
 خوب اینطوری سرعت پایین میاد؟ نمیاد؟
 چون عکس به صورت بایت تو پایگاه داده ذخیره میشه، و بعد این آرایه بایت تو کلاینت به عکس تبدیل بشه سریعتره تا اینکه ریکوست به آی آی اس فرستاده بشه، و اون هم با پایپ این کار رو بکنه!

ممنون میشم بیشتر توضیح بدین.

----------


## hezare

خوب .. خیلی ممنون که به این موضوع توجه نشون دادین .. :تشویق: 

در مورد قسمت اول صحبتتون چون سیلور لایت URl رو نمی فهمه و Uri رو فقط می فهمه من چاره ای جز این کار به قول شما به خوردش دادن نداشتم هر چند من یکسال پیش که این کد رو می نوشتم راه دیگه ای رو نتونستم برای این کار پیدا کنم و نمونه کدهای زیادی رو هم دیدم که این کار رو توصیه کرده بودن و شاید نشه اصطلاح به خوردش دادن رو به کار برد و شاید تنها راه این باشه .. اما در مورد قسمت دوم .. به نظرم نظر شما صحیح نیست .. چون نگه داشتن عکس در دیتابیس توصیه نمیشه و دیگر اینکه هیچ اختلاف سرعتی ندارن چون به هر حال در هر دو صورت باید به سرور برای گرفتن پث مراجعه کنه حال چه یه سرور اس کی یو ال باشه چه ویندوز .. تازه شاید ویندوز بهتر هم باشه.. چون در اس کی یو ال عکسها موجب افزونگی میشه .. ضمن اینکه بکاپ گیری رو مشکل می کنه و حجم دیتابیس رو زیاد میکنه و لاگ گیری حجم بیشتری می خواد و سرعت حذف و اضافه و سرچ و اینها رو هم باید درنظر گرفت

----------


## taghvajou

در مورد  برنامه شما، بک آپ و حجم کاملا درست میگی که من فکرش رو نکرده بودم.
یه نکته ای رو هم من از تجربه ام بگم:
اما در مورد سیستم های اتوماسیون، قضیه متفاوته! تصاویر جزو اسناد محسوب میشن و نباید به صورت طبیعی جایی ذخیره بشن که بشه دید یا دست کاری کرد.

حالا یه سوال دیگه:

اگه بخوای تو یه ریکست مثلا تو یکی از اون متدهای آسینک یه لیست با تعداد رکورد خیلی بالا رو دریافت کنی، wcf تایم اوت میده! شما این مشکل رو چطور حل کردی؟ (البته اگه باهاش مواجه شدین). 
کاری که من کردم:
در مجموع یه درخواست بزرگ رو در قالب پکیج های کوچیکتر متوالی (مثلا 500 تایی) کشیدم:
اول یه کانت از موجودی پایگاه داده اش گرفتم مثلا تعداد کاربران حدود 3000 تا.
بعد یه لیست طرف کلاینت درست کردم که هر پکیج رو بهش اد میکنم.
بعد یه متغیر محلی طرف کلاینت که شماره پکیج رو توش نگه میداره. 
بعد تابعی که شماره پکیج رو میده و پکیج رو بگیره>
تو قسمت سرور هم 
اول تابعی که کل رو بکشه
بعد تابعی که شماره پکیج رو بگیره و 500 nام رو واکشی کنه و برگردونه

تا حالا با این روش کار میکردم ولی به خون جگر! :ناراحت: 

خواستم ببینم که شما تنظیمی ، روشی ساده تری؟؟

----------


## hezare

سلام

درباره اینکه تو اتوماسیون شما اسناد رو در دیتابیس قرار بدید به نظرم کار درستی نیست .

شما براحتی می تونید روی فایلها هر نوع پرمیژنی رو که می خواهید تعریف کنید و روشهای امنی برای نگهداری تصاویر وجود داره .. البته پرمیژن خطر هک شدن و دسترسی ادمین رو داره .. راه حل بعدی هم اینه که فایلهات رو با یکی از روشهای موجود مثل RSA1 یا SHA1 
Incript  کنی و بر اساس پسوردهای داخل Table اجازه دسترسی بدی ..به هر حا نگه داشتن تصاویر در دیتابیس از اساس و به هر نحوی و برای رفع هر مشکلی کاملا اشتباهه
و کاربر شما به مرور زمان مجبور میشه از لحاظ سخت افزار امکانات بیشتری رو برای اجرا یک اتوماسیون تلف کنه ضمن اینکه به مرور کارایی اتوماسیون شما کاهش پیدا میکنه  .. البته متاسفانه در اتوماسیونهای دیگری هم این موضوع رو دیدم و البته مشکل بروز رسانی سخت افزار دیتابیس ..

اما در مورد سوال خودتون .. ببینید کلا وب سرویس ها برای نمایش حجم کم داده ها  طراحی شدند و برای حجم زیاد داده استفاده از وب سرویس کار درستی نیست ..به نظرم اگر درمورد اینکه چرا 3000 رکورد یا اصلا 500 رکورد رو می خواهید یکدفعه نمایش بدین توضیح بدین خیلی خوبه .. آیا کاربری وجود داره که بخواد یکدفعه 500 تا رکورد رو ببینه ؟ من تا حالا با گرید ویو هم بیش از 20 رکورد رو یکدفعه برای کاربر نمایش ندادم .. 
شما باید برای حجم داده بالا مستقیم به دیتابیس وصل شید و اطلاعات رو بخونید .
یا رکوردها رو از دیتابیس مستقیم بیارین و عکسها رو هم با نوشتن یک برنامه فایل سرور هنگام بارگذاری سمت کلاینت آپلود کرده و نمایش بدین .. 

اما پیشنهاد می کنم  از نمایش حجم داده بالا در کلاینت صرفنظر کنید و شبیه به گرید بنا به درخواست کلاینت صفحه رو برای کلاینت بیارید..

امیدوارم متوجه منظورم شده باشین .. در ضمن این سوالهاتون خوب بود و موجب فکر کردن من هم شد .. ممنون

-

----------


## taghvajou

سلام به همه
تو پروژه خودم، من عکس فرد رو تو دیتا بیس رو در فرمت بایت تو دیتابیس نگه میدارم!

وب سرویس های معمولی که دیتای حجیم و پرتعداد رو جابه جا میکنند! این تو دبلیو سی اف لحاظ نشده!

در مورد امتناع از نمایش حجم بالا داده هم، خواسته ی خود مشتریه و من هم مطیع!


در هر صورت از همفکریتون متشکرم

----------

