واضح آرشیو وب فارسی:سایت ریسک: الگوريتم lzw afsharan 06 مرداد 1388, 10:32سلام من ميخوام يم فايل gif از طريق ويژوال بيسيك بازكنم از طريق كد نويسي من اطلاعات داخل اين فايل رو خوندم جاي كه اطلاعات پيكسلها ذخيره شده از الگوريتم lzw استفاده كرده كسي درباره اين الگوريتم اطلاعاتي داره؟ the_king 06 مرداد 1388, 13:46سلام من ميخوام يم فايل gif از طريق ويژوال بيسيك بازكنم از طريق كد نويسي من اطلاعات داخل اين فايل رو خوندم جاي كه اطلاعات پيكسلها ذخيره شده از الگوريتم lzw استفاده كرده كسي درباره اين الگوريتم اطلاعاتي داره؟ الگوریتم مشهوریه و در عین حال از نظر پیاده سازی ساده است : Save StdPictures (BMPs) in .GIF Format with Optional Transparency () Lempel–Ziv–Welch (LZW) - Wikipedia (–Ziv–Welch) البته با توجه به اینکه +GDI در تمامی ویندوز های XP به بعد وجود داره، نیازی به کد نویسی خاصی برای خواندن یا نوشتن اطلاعات تصاویر GIF ندارید و می توانید از کتابخانه +GDI استفاده کنید. در کد برنامه مرور گر تصویر من یک ماژول GDIPlus.bas وجود دارد که خواندن و نوشتن تصاویر JPEG و GIF و PNG و TIFF و ... را با +GDI انجام می دهد، می توانید از آن ماژول استفاده کنید : یک مرورگر تصویر به زبان ویژوال بیسیک () afsharan 07 مرداد 1388, 10:32سلام من رشتم الكترونيك و كمي هم ويژوال بيسيك ياد دارم من ميخوام يك فايل gif رو به كد تبديل كنم و در تابلوهاي led اين فايل رو نمايش دهم چه كار بايد بكنم كه فايل gif رو ديكد بكنم afsharan 07 مرداد 1388, 10:46سلام اگه ميشه برنامه اي كه گذاشتين رو يك توضيح بدين با تشكر the_king 07 مرداد 1388, 12:36سلام من رشتم الكترونيك و كمي هم ويژوال بيسيك ياد دارم من ميخوام يك فايل gif رو به كد تبديل كنم و در تابلوهاي led اين فايل رو نمايش دهم چه كار بايد بكنم كه فايل gif رو ديكد بكنم حتما می دونید که تصاویر GIF حداکثر 256 رنگه هستند، یعنی یک جدول رنگ (Palette) دارند که رنگ های بکار رفته در تصویر را از داخل آن انتخاب می کنند. حالا بسته به اینکه تابلو های LED شما تکرنگ باشند یا چند رنگی، خودتان بایستی رنگ ها را معادلسازی کنید، مگر اینکه تصویر GIF ای که بکار می برید از همان ابتدا همان چند رنگ محدود که تابلو دارد بکار برده باشند. به هر حال اگر قصد تان صرفا خواندن فایلهای GIF باشد، اصلا نیازی به کد های اضافی ندارید، حتی به آن ماژولی که من نوشته بودم هم نیازی نیست، چون خود ویژوال بیسیک توانایی خواندن و نمایش تصاویر GIF را دارد، فقط نمی تواند آنها را ایجاد کند و بنویسد. کد زیر یک تصویر C:Image1.gif را خوانده و آنرا به یک آرایه دو بعدی Bitmap تبدیل می کند، هر خانه از این Bitmap مقدار 1 دارد به شرطی که رنگ آن نقطه در تصویر gif سفید باشد، وگرنه 0 است. پس در حقیقت تصویر را به یک آرایه دو بعدی 0 و 1 تبدیل می کند : Private Sub Form_Load() Dim Pic1 As PictureBox Dim Bitmap() As Byte Dim X As Long, Y As Long Set Pic1 = Me.Controls.Add("VB.PictureBox", "Pic1") With Pic1 .BorderStyle = vbBSNone .AutoSize = True .AutoRedraw = True .ScaleMode = vbPixels Set .Picture = LoadPicture("C:Image1.gif") ReDim Bitmap(0 To .ScaleWidth - 1, 0 To .ScaleHeight - 1) For Y = 0 To .ScaleHeight - 1 For X = 0 To .ScaleWidth - 1 If .Point(X, Y) = vbWhite Then Bitmap(X, Y) = 1 Else Bitmap(X, Y) = 0 End If Next Next End With End Sub afsharan 08 مرداد 1388, 09:03سلام ميشه اين خط رو توضيح بدين redim bitmap(0 to .scalewidth - 1, 0 to .scaleheight - 1) the_king 08 مرداد 1388, 12:58سلام ميشه اين خط رو توضيح بدين ReDim Bitmap(0 To .ScaleWidth - 1, 0 To .ScaleHeight - 1) Bitmap نام آرایه است که در ابتدای کد تعریف شده، اما چون برای آن ابعادی مشخص نکرده بودیم، بایستی بصورت دینامیک ابعادش را بر اساس ابعاد تصویر GIF تنظیم کنیم. ScaleWidth طول تصویر GIF است (بر حسب پیکسل) که چون ما اندیس ها را از 0 شروع می کنیم، برای آخرین اندیس ScaleWidth - 1 را تعیین می کنیم. به همان ترتیب ScaleHeight عرض تصویر GIF است و برای آخرین اندیس اش ScaleHeight - 1 را بکار می بریم. مثلا اگر ابعاد تصویر GIF برابر 10 در 20 پیکسل باشد، آنگاه Bitmap به این شکل ایجاد می گردد : ReDim Bitmap(0 To 9, 0 To 19) afsharan 10 مرداد 1388, 11:15سلام منون از همكاري شما ببخشيد سواد برنامه نويسيvb من پاينه اين خط رو هم توضيح بدين Set Pic1 = Me.Controls.Add("VB.PictureBox", "Pic1") the_king 10 مرداد 1388, 20:26سلام منون از همكاري شما ببخشيد سواد برنامه نويسيvb من پاينه اين خط رو هم توضيح بدين Set Pic1 = Me.Controls.Add("VB.PictureBox", "Pic1") در زمان اجرای کد (Runtime)، یک کنترل PictureBox با نام Pic1 را روی فرم قرار می دهد، البته Visible آن کنترل False خواهد بود و دیده نمی شود. afsharan 11 مرداد 1388, 05:36سلام برنامه اي كه شما نوشتين خيلي برام مفيد بود با اين برنامه من يك عكس رو ميتونم بخونم حالا اگه يك فايل متحرك gif (انيميشن) باشه چه كار بايد كرد the_king 12 مرداد 1388, 02:13سلام برنامه اي كه شما نوشتين خيلي برام مفيد بود با اين برنامه من يك عكس رو ميتونم بخونم حالا اگه يك فايل متحرك gif (انيميشن) باشه چه كار بايد كرد کنترل های استاندارد تصویری فقط اولین فریم GIF های متحرک را نمایش می دهند، به همین جهت برای دریافت اطلاعات بقیه فریم ها قابل استفاده نیستند. برای اینکه سایر فریم ها را نمایش دهیم، از یک کنترل WebBrowser که حقیقتا یک پنجره Internet Explorer است، استفاده خواهیم کرد. WebBrowser می تواند یک تصویر GIF متحرک را نمایش دهد. زمانی که تصویر نمایش پیدا کرد، می توانیم هر لحظه از تصویر آن عکس گرفته و به داخل یک PictureBox منتقل کنیم. بقیه مراحل مشابه همان حالتی خواهد بود که یک تصویر عادی درون PictureBox قرار گیرد. کد برنامه پیوستی یک تصویر GIF متحرک را در داخل یک کنترل WebBrowser نمایش می دهد. هر زمانی که دکمه Get Frame را فشار دهید، از تصویر متحرک عکس گرفته می شود و در حافظه آرایه Bitmap قرار می گیرد. برای آنکه صحت عملکرد روتین مشخص شود، یک روتین دیگر به نام ShowFrame ایجاد کردم تا آرایه Bitmap را روی فرم نشان دهد. کد کامل برنامه به همراه فایل اجرایی exe ضمیمه این پست می باشد. afsharan 12 مرداد 1388, 09:54سلام در اين WebBrowser ميشه هر فريم رو تشخيص داد كه خودكار از آن عكس بگير و كدها رو استخراج كنه the_king 12 مرداد 1388, 19:43سلام در اين WebBrowser ميشه هر فريم رو تشخيص داد كه خودكار از آن عكس بگير و كدها رو استخراج كنه نه به اون شکل، ما از بیرون از کنترل WebBrowser به مشخصات و موقعیت و تعداد فریم ها دسترسی ای نداریم و طبیعتا نمایش یک فریم جدید هم به برنامه اعلام نخواهد شد. برای تشخیص خودکار یک فریم جدید، یک راهی به ذهنم می رسه که قطعا عملی است، اما راه حل چندان مناسبی نیست : فرض کنید که در ابتدا یک نمونه از تصویر متحرک خوانده شود. سپس با یک نرخ تکرار بالا و فواصل زمانی کوتاه، مجددا یک نمونه دیگر خوانده شود. اگر محتویات دو نمونه با هم متفاوت بود، فریم جدیدی نمایش داده شده است.
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1988]