PDA

View Full Version : نحوه نمایش عکس از استریم؟



Alireza_Salehi
جمعه 29 دی 1385, 10:12 صبح
چطور میشه یک تصویر رو از استریم یا مثلا یک آرایه بایت نمایش داد کنترل Image که فقط تصاویر ذخیره شده را نمایش میدهد؟

Arvin Soft
جمعه 29 دی 1385, 20:29 عصر
دوست عزیز برای این کار باید از متود Response.BinaryWrite استفاده کنید و تصویر رو در یک صفحه سوری(الکی)! اصطلاحا نقاشی کنید و بعد آدرس اون صفحه رو بعنوان سورس تصویر نشان بدهید. این مقاله رو ببینید:
http://aspalliance.com/140_Retrieving_Images_from_SqlServer_in_ASP_NET
درسته که برای نحوه نمایش تصویری هست که در بانک SQL Server ذخیره شده، اما مطمئنا به کار شما هم میاد. :چشمک:

Alireza_Salehi
جمعه 29 دی 1385, 22:05 عصر
دوست عزیز برای این کار باید از متود Response.BinaryWrite استفاده کنید و تصویر رو در یک صفحه سوری(الکی)! اصطلاحا نقاشی کنید و بعد آدرس اون صفحه رو بعنوان سورس تصویر نشان بدهید. این مقاله رو ببینید:
http://aspalliance.com/140_Retrieving_Images_from_SqlServer_in_ASP_NET
درسته که برای نحوه نمایش تصویری هست که در بانک SQL Server ذخیره شده، اما مطمئنا به کار شما هم میاد. :چشمک:


ممنون از راهنماییتون من هم هدفم نمایش از دیتابیس بود فقط اگر قرار باشه مثلا در ردیف های یک GridView نمایش داده بشه یه کم پیچیده میشه.
ولی در برخی از منابع مطالبی در مورد کنترل DynamicImage دیدم که باید در دات نت 2 باشه ولی درmsdn که پیداش نکردم intellisense دات نت هم نشونش نمی ده ، تو قسمت Toollbox>Choose Item هم نیست (در واقع در System.Web.UI.WebControls وجود نداره) فکر کنم از اون روش قبلی بهتر باشه در واقع مثل کنترل تصویر ویندوز فرم عمل می کنه !

(کتاب ASP.NET 2 دیباگران و یک سری مقالاتی که قبل از اومدن دات نت 2 منتشر شده بود واین کنترل رو جزو مزیت ها و نوآوری های نسخه 2 معرفی کرده بودند)

مثلا با یه همچین کدی:

DynamicImage1.Image=System.Drawing.Image.FromStrea m(...)Visual Studio.NET 2005 Team System

Arvin Soft
شنبه 30 دی 1385, 12:52 عصر
فقط اگر قرار باشه مثلا در ردیف های یک GridView نمایش داده بشه یه کم پیچیده میشه.

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

<asp:imagefield datafield="photo" headertext="Picture" />و اما درمورد DynamicImage. جالبه که در MSDN نوشته شده ImageField از کنترل ASP.NET 2.0 DynamicImage برای نمایش تصویر بانک داده یا تصویر در یک URL استفاده می کنه. علاوه براین موقعی که به حالت edit میروید، ستون ImageField یک دکمه Browse به کاربر نشون میده تا بتونه مسیر جدید فایل تصویر رو مشخص کنه.
برای اطلاعات بیشتر درباره کنترل DynamicImage، می تونید اینجا (http://www.codeproject.com/aspnet/CsDynamicImage.asp) رو ببینید.

bardia goharbin
یک شنبه 15 بهمن 1385, 15:26 عصر
arsp_2004 عزیز ، من هم به مشکل شما برخوردم،
من یک فیلد Image در دیتابیس دارم که میخواهم تصویر ذخیره شده در آنرا با استفاده از یک DataList نمایش دهم. طبق گفته دوستمون از Response.BinaryWrite استفاده کردم و تصویر رو از دیتابیس میخونم. ولی نمیدونم که چطورى این تصویر ساخته شده رو به یک صفحه فرضی ارسال کنم و به کنترل خودم وصلش کنم یا به اصطلاح ImgaeUrl رو به این آدرس تصویر ربط بدم.
اگه روشی که رفتم درسته که در مورد سئوالم جواب بدین.اگر هم راه حل دیگری رو انتخاب کردین اون رو هم بگین ممنون میشم.

اینم کد من همونطور که میدونید C#


SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["MyConnectionString"].ConnectionString);
SqlCommand cmd = new SqlCommand("SELECT UserPhoto From Tbl_User Where UserName='Ali11'", cn);
cn.Open();
SqlDataReader dr = null;
dr = cmd.ExecuteReader();
if (dr.Read())
{
Response.BinaryWrite((byte[])dr["UserPhoto"]);
}


البته به نظر میرسه که روش بالا یک مقداری برای استفاده در DataList منطقی نباشه و برای همین دنبال استریم رفتم و یک کدی هم برای استریم پیدا کردم البته به VB که نتونستم به #C تبدیلش کنم.


Dim PictureCol As Integer = 0
Dim cn As New SqlConnection("Server=Seakwil;Database=Master;Trusted_Connection= yes")
Dim cmd As New SqlCommand("SELECT Photo FROM TMP_Pic", cn)
cn.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader()
dr.Read()
Dim b(dr.GetBytes(PictureCol, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
dr.GetBytes(PictureCol, 0, b, 0, b.Length)
dr.Close()
cn.Close()
Dim ms As New System.IO.MemoryStream(b)
imgBLOB.ImageUrl = System.Drawing.Image.FromStream(ms)


بحث عجیبیه استفاده از تصاویری که در دیتابیس ذخیره شده، اولش فکر میکردم که خیلی آسونتر از این حرفهاست و با یک DataBindig به راحتی قابل حله ولی مثل اینکه خواب خوشی دیده بودم.
راستش به نظر من مایکروسافت کوتاهی کرده توی این زمینه :))