PDA

View Full Version : ذخیره تصاویر با تعداد نا محدود



mohammad-gh
دوشنبه 01 مهر 1387, 09:42 صبح
با سلام، من در یک برنامه دبیرخانه قسمتی برای ذخیره عکس و بصورتیکه در خود بانک ذخیره شود در نطر گرفتم (عکس به صورت فیلد Image در بانک ذخیره می شود ) ولی هنگام ورود تصاویر متوجه شدم امکان دارد تصاویر نامه من که آنها را اسکن می کنم بدلیل چند
صفحه بودن نامه بیش از یک تصویر یا صفحه باشد، تعداد صفحات انقدر متغییر است که نمی توانم چند فیلد image در بانک برایش پیش بینی کنم. لطفا راهنمایی کنید که چطور می توانم این گونه تصاویر (نامه های چند صفحه ای) را در بانکم ذخیره کنم.

bardia goharbin
دوشنبه 01 مهر 1387, 09:53 صبح
بهترين راه حل شما اين است که تصاوير خود رو بصورت Multi page و در يک فايل ذخيره کنيد

Save acquired images to multipage TIFF files
Save or add acquired images to PDF documents

Chabok
دوشنبه 01 مهر 1387, 12:45 عصر
با سلام .

یک پیشنهاد :
میتونید یک جدول برای تصاویر بگیرید . که فیلدهاش کد نامه و عکس باشن . اینجوری مشکلی با تعداد تصاویر نخواهید داشت .یعنی برای هر نامه به هر تعداد که بخواهید میتونید عکس اضافه کنید .

موفق باشید . خدانگهدار

mohammad-gh
شنبه 27 مهر 1387, 11:10 صبح
با سلام دوباره، من از همون روش multi page با فرمت tif استفاده کردم اما مشکلی که وجود دارد:

1- می خواهم وقتی از بانک فرا می خوانم به همان صورت بر روی کامپیوتر ذخیره کنم تا بتونم از آن استفاده کنم من توسط دستور زیر تونستم تصویری که در باکس image ظاهر میشه رو روی کامپیوتر و با همان فرمت tif ذخیره نمایم ولی در این حالت فقط یکی از تصاویر نشان داده می شود.(چیزی شبیه به دانلود انجام بدم)


picbox.Image.Save(savedialog.FileName)

2- حداقل اینکه بتونم در خود برنامه اون عکسهایی که به این صورت و فقط در یک فایل TIF ذخیره کردم رو ببینم .

__H2__
یک شنبه 28 مهر 1387, 00:39 صبح
سلام
خیلی میبخشید ...
به نظر من ایجاد یک جدول و جدید و پیاده سازی یک رابطه "یک به چند" یعنی جدولی سه ستونه یا بیشتر (بیشتر برای تاریخ و نوع فایل و توضیحات و...) شبیه آنچه کاربر Chabok گفتند، شاید ساده تر باشد.

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

چون من خودم یکبار سالها قبل برنامه برای دبیرخانه ای نوشتم و آخر سر به آنجا رسیدیم که شاید در یک نامه صادره نیاز شود فایل doc نامه وارد دیتابیس شود و نیز شاید نامه پیوست هایی داشته باشد که فرمت های دیگری داشته باشند.
یا نامه وارده ای که الکترونکی باشد و...

=====

(
البته در آن چند سال قبل به جای دیتابیس، برنامه خودکار فایلهای ورودی را به پوشه ای خاص و ویژه و مشخص کپی میکرد و مسیر نسبی (نه مطلق و از ریشه درایو) فایل در هارد را در دیتابیس وارد میکرد و البته کاربر هم چیزی متوجه نمیشد.

البته نمیخواهم بگویم انتخاب دیتابیس ایرادی دارد، مخصوصاً که ساده تر است و امنیت و backup را هم ساده تر میکند، و البته همه بار را به دوش sqlserver می اندازد !
)

ali_md110
یک شنبه 28 مهر 1387, 02:16 صبح
به نظر من زخیره عکس توی بانک مناسب نیست اگر تصاویر رو توی هارد دیسک زخیره کنی و به هر کدوم یک کد بدی و بعد از طریق این کد اونا رو بازیابی کنی بهتره

milade
یک شنبه 28 مهر 1387, 03:35 صبح
شما تصاویر رو چگونه پیدا می کنید؟

ali_md110
یک شنبه 28 مهر 1387, 11:49 صبح
http://barnamenevis.org/forum/showthread.php?t=127548

mohammad-gh
یک شنبه 28 مهر 1387, 12:26 عصر
با تشکر از پاسخ ها به این سوال اما :


به نظر من زخیره عکس توی بانک مناسب نیست اگر تصاویر رو توی هارد دیسک زخیره کنی و به هر کدوم یک کد بدی و بعد از طریق این کد اونا رو بازیابی کنی بهتره

چون من می خواهم بانکم یکپارچه باشه و از شهر دیگری هم از آن استفاده بشه و دلایل دیگر باید تصاویر در بانک ذخیره بشه.

شما تصاویر رو چگونه پیدا می کنید؟
نمی دونم دقیقا منظور شما چیه ولی، من اول تصاویر رو به یک Image Box وارد می کنم و بعد از اونجا می خواهم تصاویر با فرمت TIF رو در جایی ذخیره کنم . البته اینکه تصویر رو اول نمایش بدم و بعد ذخیره کنم اصلا مهم نیست.
فکر می کنم نوع دریافت یا ذخیره این نوع تصاویر باید به گونه ای دیگر باشد، شاید هم نوع بازیابی یا فراخوانی تصاویر نحوه دیگری است.
من از روش کاربرChabok هم استفاده کردم و هیچ مشکلی هم با آن ندارم ولی می خواهم تمام تصاویر در یک رکورد و یکپارچه ذخیره شود.
منتظر راهنمایی شما هستم.

mpmsoft
یک شنبه 28 مهر 1387, 12:51 عصر
امیدوارم این کارتو راه بندازه




this.picbox1.Image = "C:\\location\\of\\image\\image.jpg";

byte[] b = new byte[0];
b = convertPicBoxImageToByte(picbox1);
cmd.Parameters.Add(new SqlParameter("@Image", SqlDbType.VarBinary, convertPicBoxImageToByte(picbox1).Length, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Current, convertPicBoxImageToByte(picbox1)));

private byte[] convertPicBoxImageToByte(System.Windows.Forms.Pict ureBox pbImage)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
pbImage.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return ms.ToArray();
}

mpmsoft
یک شنبه 28 مهر 1387, 12:55 عصر
یادم رفت وی بی شو برات بذارم ببخشید



Imports System.Drawing
Imports System.IO


Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub
Private Function ConvertFromPictureBoxToArray(ByVal oPictureBox As PictureBox) As Byte()
Dim oStream As New MemoryStream
Dim bmp As New Bitmap(oPictureBox.Image)
Try
bmp.Save(oStream, Imaging.ImageFormat.Tiff)
ConvertFromPictureBoxToArray = oStream.ToArray
bmp.Dispose()
oStream.Close()
Catch ex As Exception

End Try
End Function
End Class

__H2__
دوشنبه 29 مهر 1387, 00:17 صبح
سلام

... ولی می خواهم تمام تصاویر در یک رکورد و یکپارچه ذخیره شود.
منتظر راهنمایی شما هستم.

یک فیلد با قابلیت نگه داری اظلاعات باینری میتواند یک دنیا اطلاعات را نگه دارد، نگه داری چند تصوری که جا خود دارد!

من گمان میکنم شما با تبدیل تصویر به آرایه بایتی مشکلی نداشته باشید...
ساده ترین روش استفاده از BinaryFormatter که به شما اجازه میدهد انواع دیتاها را و به تعداد متعدد را در یک ساختار ثابت سریالی کنید ولی برای کار شما پیشنهاد نمیکنم (چون در سرعت و کارآیی اش تردید دارم.)

پیشنهاد میکنم خودتان اطلاعات را با یک ساختار header ای دلخواه ذخیره کنید.



4 Byte = Integer = تعداد تصاویر

4 Byte = Integer = حجم بایتی تصویر اول
...
اطلاعات تصویر اول
...

4 Byte = Integer = حجم بایتی تصویر دوم
...
اطلاعات تصویر دوم
...

4 Byte = Integer = حجم بایتی تصویر سوم
...
اطلاعات تصویر سوم
...


یا



4 Byte = Integer = تعداد تصاویر
4 Byte = Integer = حجم بایتی تصویر اول
4 Byte = Integer = حجم بایتی تصویر دوم
4 Byte = Integer = حجم بایتی تصویر سوم

...
اطلاعات تصویر اول
...


...
اطلاعات تصویر دوم
...


...
اطلاعات تصویر سوم
...


امیدوارم متوجه منظورم شده باشید، به نظر اگر رابطه یک به چند را نخواهید (!!) باید روش خوبی باشد.

البته sqlserver هم امکانات و دستورات کار روی دیتای باینری را تا حدودی دارد ولی احتمالاً مجبور خواهید شد تا هر بار کل دیتاهای را بخوانید و کلش را بنویسید...

mohammad-gh
پنج شنبه 09 آبان 1387, 10:38 صبح
می بخشی آقای mpmsoft من اگر بخوام اطلاعات رو از بانک بکشم بیرون و به همون صورت چند صفحه ای (با فرمت TIF) در هارد ذخیره کنم چه کار باید بکنم؟