09-10-15, 01:40 PM
(آخر تعديل لهذه المشاركة : 09-10-15, 01:44 PM {2} بواسطة silverlight.)
السلام عليكم ورحمة الله وبركاته
الهدف من هذا الموضوع هو توضيح الكود اللازم لبناء صورة من النوع TIFF و اضافة أكثر من صورة لها و حفظها علي الكمبيوتر ثم بعد ذلك استخلاص جميع الصور منها و حفظها أيضا علي الكمبيوتر
هذا الموضوع يمكن اعتباره إمتدادا للموضوع الموجود في اللينك Introduction To Screen Capture ولكن تم كتابته بشكل منفصل لأنه أيضا يمكن استخدامه لتوضيح كيفية التعامل مع االصور من النوع TIFF خاصة وأنه يمكن استخدامها لبناء أشياء شبيهة بملفات PDF مثلا و الكلمة TIFF هي اختصار للكلمات : Tagged Image File Format
ملفات TIFF هي شبيهة جدا بملفات GIF لذلك يمكن استخدامها لتخزين أكثر من صورة داخلها ولكنها ليست متحركة مثل ملفات GIF لذلك إن أردت أن تستخدمها مثل ملفات GIF او مثل ملفات PDF عليك أن تستخلص منها جميع الصور الموجودة داخلها
ملفات TIFF ممكن ان نجفظ بها صورة واحدة فقط أو أكثر من صورة و علي الأقل يجب أن يكون بها صورة واحدة وهي الصورة التي ستكون في اعلي كل الصور و التي تخفي خلفها بقية الصور
عموما ملفات TIFF يمكن استخدامها بأكثر من اسلوب لحفظ البيانات علي هيئة صورة او علي هيئة مجموعة من الصور
الكود التالي يوضح كيفية حفظ صورة واحدة أو مجموعة من الصور في ملف من النوع TIFF
الكود اتالي يوضح كيفية استخلاص الصور الموجودة داخل ملف من النوع TIFF
الكود التالي يوضيح كيفية استخدام الأكواد أعلاه لبناء صورة من النوع TIFF و حفظها علي جهاز الكمبيوتر أو عرضها داخل PictureBox و أيضا يوضح كيفية استخلاص الصور الموجود في ملف من النوع TIFF وحفظها علي جهاز الكمبيوتر أيضا
الكود كاملا موجود بالمرفقات
المراجع
EncoderParameters
ImageCodecInfo
Image SaveAdd Method
Image Save Method
Stream Class
الهدف من هذا الموضوع هو توضيح الكود اللازم لبناء صورة من النوع TIFF و اضافة أكثر من صورة لها و حفظها علي الكمبيوتر ثم بعد ذلك استخلاص جميع الصور منها و حفظها أيضا علي الكمبيوتر
هذا الموضوع يمكن اعتباره إمتدادا للموضوع الموجود في اللينك Introduction To Screen Capture ولكن تم كتابته بشكل منفصل لأنه أيضا يمكن استخدامه لتوضيح كيفية التعامل مع االصور من النوع TIFF خاصة وأنه يمكن استخدامها لبناء أشياء شبيهة بملفات PDF مثلا و الكلمة TIFF هي اختصار للكلمات : Tagged Image File Format
ملفات TIFF هي شبيهة جدا بملفات GIF لذلك يمكن استخدامها لتخزين أكثر من صورة داخلها ولكنها ليست متحركة مثل ملفات GIF لذلك إن أردت أن تستخدمها مثل ملفات GIF او مثل ملفات PDF عليك أن تستخلص منها جميع الصور الموجودة داخلها
ملفات TIFF ممكن ان نجفظ بها صورة واحدة فقط أو أكثر من صورة و علي الأقل يجب أن يكون بها صورة واحدة وهي الصورة التي ستكون في اعلي كل الصور و التي تخفي خلفها بقية الصور
عموما ملفات TIFF يمكن استخدامها بأكثر من اسلوب لحفظ البيانات علي هيئة صورة او علي هيئة مجموعة من الصور
الكود التالي يوضح كيفية حفظ صورة واحدة أو مجموعة من الصور في ملف من النوع TIFF
كود :
Friend Sub ImagesToTiff(fileName As String, images As Image(), isMultiIFrame As Boolean)
' Define an EncoderParameters array
Dim encoderParams As New EncoderParameters(1)
' Define ImageCodecInfo to retrieve information about image encoders and decoder
Dim encoderInfo As ImageCodecInfo = ImageCodecInfo.GetImageEncoders().First(Function(ie) ie.MimeType = "image/tiff")
' define tiff image
Dim tiff As Image = CType(Nothing, Image)
' define the top bitmap
Dim masterBitmap As Bitmap = CType(Nothing, Image)
If isMultiIFrame Then
Dim i As Integer = 0
While i < images.Length
If i = 0 Then
' save the top bitmap/frame
Dim firstStream As New IO.MemoryStream
masterBitmap = images(i)
masterBitmap.Save(firstStream, ImageFormat.Tiff)
tiff = Image.FromStream(firstStream)
encoderParams.Param(0) = New EncoderParameter(Encoder.SaveFlag, CType(EncoderValue.MultiFrame, EncoderParameterValueType))
tiff.Save(fileName, encoderInfo, encoderParams)
Else
encoderParams.Param(0) = New EncoderParameter(Encoder.SaveFlag, CType(EncoderValue.FrameDimensionPage, EncoderParameterValueType))
Dim secondStream As New IO.MemoryStream
Dim img As Image = CType(images(i), Image)
img.Save(secondStream, ImageFormat.Tiff)
' add and save more frames to the file or stream specified in a previous call to the Save method.
Using frame As Image = Image.FromStream(secondStream)
tiff.SaveAdd(frame, encoderParams)
End Using
End If
If i = images.Length - 1 Then
encoderParams.Param(0) = New EncoderParameter(Encoder.SaveFlag, CType(EncoderValue.Flush, EncoderParameterValueType))
tiff.SaveAdd(encoderParams)
End If
i += 1
End While
Else
Dim j As Integer = 0
While j < images.Length
Dim thirdStream As New IO.MemoryStream
Dim img As Image = CType(images(j), Image)
img.Save(thirdStream, ImageFormat.Tiff)
Using frame As Image = Image.FromStream(thirdStream)
frame.Save(fileName, ImageFormat.Tiff)
End Using
j += 1
End While
End If
End Sub
الكود اتالي يوضح كيفية استخلاص الصور الموجودة داخل ملف من النوع TIFF
كود :
Friend Sub TiffToImages(fileName As String)
If IsMultFrameImage(Image.FromFile(fileName)) Then
Using ImageFile As Image = Image.FromFile(fileName).Clone
Dim frameDimensions As New FrameDimension(ImageFile.FrameDimensionsList(0))
Dim count As Integer = ImageFile.GetFrameCount(frameDimensions)
Dim names As String() = New String(count) {}
Dim frame As Integer = 0
While frame < count
ImageFile.SelectActiveFrame(frameDimensions, frame)
Using bmp As New Bitmap(ImageFile)
names(frame) = String.Format("{0}\{1}{2}.jpeg", IO.Path.GetDirectoryName(fileName), IO.Path.GetFileNameWithoutExtension(fileName), frame)
bmp.Save(names(frame), ImageFormat.Jpeg)
End Using
frame += 1
End While
End Using
End If
End Sub
Friend Function IsMultFrameImage(img As Image) As Boolean
Return img IsNot Nothing AndAlso img.RawFormat.Guid = ImageFormat.Tiff.Guid AndAlso ((img.GetFrameCount(New FrameDimension(img.FrameDimensionsList(0)))) > 1)
End Function
الكود التالي يوضيح كيفية استخدام الأكواد أعلاه لبناء صورة من النوع TIFF و حفظها علي جهاز الكمبيوتر أو عرضها داخل PictureBox و أيضا يوضح كيفية استخلاص الصور الموجود في ملف من النوع TIFF وحفظها علي جهاز الكمبيوتر أيضا
كود :
' استخدام مجموعة من الصور و حفظها علي هيئة صورة واحدة
Dim images As Image() = New Image() {My.Resources.tmp_0.Clone(), My.Resources.tmp_1.Clone(), My.Resources.tmp_2, My.Resources.tmp_3.Clone()}
Dim fileName As String = ".\egyptFlag.tiff"
ImagesToTiff(fileName, images, True)
' عرض الصورة
Dim stockImage As Image = Image.FromFile(fileName)
PictureBox1.Image = stockImage
' استخلاص الصور
TiffToImages(fileName)
الكود كاملا موجود بالمرفقات
المراجع
EncoderParameters
ImageCodecInfo
Image SaveAdd Method
Image Save Method
Stream Class