PDA

View Full Version : در مورد خوندن عکس gif



elec645
سه شنبه 20 مهر 1389, 14:26 عصر
سلام
چطوری میشه یک عکس به فرمت gif رو خوند و در ماتریس ذخیره کرد. عکس gif دارای چندین فریم است می خوام اینها رو بخونم و در ماتریس هایی ذخیره کنم.

ali.rezaei7
سه شنبه 20 مهر 1389, 16:17 عصر
سلام
در این کلاسی که نوشتم، شما می تونید فریم ها بصورت جداگانه در ماترس ذخیره کنید.

using System;
using System.Drawing;
using System.Drawing.Imaging;

class GifFrame
{
FrameDimension fd;
Image Gif;

public GifFrame(string FileName)
{
Gif = Image.FromFile(FileName);
fd = new FrameDimension(Gif.FrameDimensionsList[0]);
}


public int GetFrameCount
{
get
{
return Gif.GetFrameCount(fd);
}
}

public Bitmap GetFrame(int FrameNumber)
{
Gif.SelectActiveFrame(fd, FrameNumber);
return new Bitmap(Gif);

}


}


GetFrameCount: تعداد فریم های فایل گیف رو بر می گردونه.
GetFrame: فریم مورد نظر رو بصورت Bitmap بر می گردونه.

elec645
چهارشنبه 21 مهر 1389, 07:56 صبح
سلام
اقا خيلي ممنون :چشمک:
اگه زحمتي نيست يه مثال بزنيد كه چطوري از اين كلاس استفاده كنم:افسرده:

ali.rezaei7
چهارشنبه 21 مهر 1389, 16:39 عصر
ابتدا یه کلاس ایجاد کنید: Project -> Add Class
سپس محتویات کلاس رو پاک کنید و کدهایی که قرار دام رو داخل کلاس کپی کنید.
برای استفاده از کلاس، از کد زیر استفاده می کنیم:



GifFrame Gif= new GifFrame(@"FileName");


بجای FileName آدرس تصویر رو بنویسید.
برای بدست آوردن تعداد عکس های (فریم ها) تصویر گیف از تابع GetFrameCount استفاده می کنیم مثال:



int FrameCount=Gif.GetFrameCount();


برای دسترسی به هر فریم بصورت مجزا از تابع GetFrame استفاده می کنیم. این تابع فریم مورد نظر رو در قالب شی ای از کلاس Bitmap برمی گردونه. مثال:



Bitmap bmp=Gif.GetFrame(1);


کد بالا دومین تصویر فایل گیف رو داخل شی bmp قرار میده. می تونید مقدار یک رو تغییر بدید تا فریم های دیگری رو داشته باشید، ولی این مقدار باید از تعداد فریم های تصویر تجاوز نکنه.

در مورد قسمت دوم سوالتون فکر نمی کنم بشه اطلاعات عکس رو داخل System.Drawing.Drawing2D.Matrix قرار داد.به نظر من بهتر اطلاعات پیکسل های فریم ها رو داخل آرایه دو بعدی از نوع Color قرار بدیم.

elec645
پنج شنبه 22 مهر 1389, 11:58 صبح
ممنون:تشویق:
اون خط برنامه که برای گرفتن تعداد فریم هاست خطا میده :عصبانی++:

ali.rezaei7
جمعه 23 مهر 1389, 18:42 عصر
عجیبه!
لطف کنید خطا رو توسایت قراربدید تا شاید بتونم کمک کنم.

elec645
شنبه 24 مهر 1389, 10:00 صبح
برنامه من اینه

GifFrame Gif = new GifFrame(@"C:\Documents and Settings\Next\Desktop\gift\sms.gif");
int FrameCount = Gif.GetFrameCount();
Bitmap bmp = Gif.GetFrame(1);
Color c;
byte[,] matrix = new byte[bmp.Width, bmp.Height];
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
c = bmp.GetPixel(i, j);
byte gray = (byte)(.299 * c.R + .587 * c.G + .114 * c.B);
matrix[i, j] = gray;

}
}


و خطای زیر رو میده
Non-invocable member 'GifFrame.GetFrameCount' cannot be used like a method.

ali.rezaei7
شنبه 24 مهر 1389, 13:53 عصر
خطا به خاطر دوتا پرانتزی هستش که بعد از GetFrameCout گذاشتی!