1 ضمیمه
به دست آوردن تعداد پیکسل هررنگ در تصاویر بیت مپ
با سلام خدمت اساتید محترم
من تو پروژم نیاز دارم تعداد پیکسل هررنگ رو به صورت جداگانه داشته باشم(شکل زیر) که استفاده از دستوراتی مثل bmp.GetPixel(x,y) خیلی زمانبره
آیا راهی هست ک بتونم سریعتر تعداد پیکسل هررنگ رو بدست بیارم (تو بعضی از تصاویر ممکنه بیشتر از 200 تا رنگ داشته باشیم که خیلی زمانبره)
ممنون میشم کمکم کنید
ضمیمه 128354
نقل قول: به دست آوردن تعدادپیکسل هررنگ در تصاویر بیت مپ
با سلام
این لینک رو یه نگاه بندازید.
نقل قول: به دست آوردن تعداد پیکسل هررنگ در تصاویر بیت مپ
اول قبل از هر کاری باید رنگ ها رو به برنامت بشناسونی (الان دسترسی به ویژال استادیو ندارم برات کد بنویسم تو اینترنت سرچ کنی این ها رو هست)
یعنی رنگ های سیستم که یه لیست تقریبا بلند هست که شما بر اساس اون به برنامت هر رنگ رو میشناسونی (با استفاده از کد هگزادسیمال برا رنگ ها)
بعد که رنگ رو شناسوندی میای پیکسل به پیکسل عکس رو چک میکنی و مقادیر هگزادسیمالی که تو هر پیکسل بدست میاد رو با اون مقادیری که به برنامت شناسوندی چک میکنی و کد هگزا به هر کدوم که نزدیک تر بود یکی به اون رنگ اضافه میکنی
کار سختی نیست فقط یکمی طولانی هست انجام دادنش و اگه برنامه نویسی گرافیک توی سی شارپ بلد باشی خیلی راحت هست این روش برات در غیر اینصورت پیشنهاد من اینه که برنامه نویسی گرافیک تو سی شارپ رو مطالعه کنید
با سپاس Spaceman
نقل قول: به دست آوردن تعدادپیکسل هررنگ در تصاویر بیت مپ
نقل قول:
نوشته شده توسط
Mahmoud Zaad
با سلام
این
لینک رو یه نگاه بندازید.
منونم دوست عزیز از راهنماییتون
از این کلاس قبلا استفاده کردم ولی نتونستم تعداد پیکسل هر رنگ رو برگردونم . نمیدونم کجا اشتباه میکردم
ممنون میشم بیشتر راهنمایی کنید
نقل قول: به دست آوردن تعداد پیکسل هررنگ در تصاویر بیت مپ
int count = 0;
HashSet<Color> colors = new HashSet<Color>();
Bitmap bmp = null;
if (File.Exists(fileName))
{
try
{
bmp = new Bitmap(fileName);
if (bmp != null)
{
for (int y = 0; y < bmp.Size.Height; y++)
{
for (int x = 0; x < bmp.Size.Width; x++)
{
colors.Add(bmp.GetPixel(x, y));
}
}
count = colors.Count;
}
}
catch
{
throw;
}
finally
{
colors.Clear();
bmp.Dispose();
}
}
نقل قول: به دست آوردن تعداد پیکسل هررنگ در تصاویر بیت مپ
نقل قول:
نوشته شده توسط
amin1softco
int count = 0;
HashSet<Color> colors = new HashSet<Color>();
Bitmap bmp = null;
if (File.Exists(fileName))
{
try
{
bmp = new Bitmap(fileName);
if (bmp != null)
{
for (int y = 0; y < bmp.Size.Height; y++)
{
for (int x = 0; x < bmp.Size.Width; x++)
{
colors.Add(bmp.GetPixel(x, y));
}
}
count = colors.Count;
}
}
catch
{
throw;
}
finally
{
colors.Clear();
bmp.Dispose();
}
}
ممنون دوست عزیز از راهنماییتون
من با بدست آوردن رنگ ها مشکلی ندارم ، مشکل با بدست آوردن تعداد پیکسل در هر رنگه که با GetPixel(x,Y) 1 ، برای تصاویری که رنگشون زیاده خیلی زمان میبره
نقل قول: به دست آوردن تعداد پیکسل هررنگ در تصاویر بیت مپ
دوست عزیز شما نوعش را به دیکشنری تغییر بدید با اضافه کردن یک شرط تعدادش را بدست بیارید
Dictionary<Color, int> colors = new Dictionary<Color, int>();
Bitmap bmp = null;
if (File.Exists(fileName))
{
try
{
bmp = new Bitmap(fileName);
if (bmp != null)
{
for (int y = 0; y < bmp.Size.Height; y++)
{
for (int x = 0; x < bmp.Size.Width; x++)
{
Color c=bmp.GetPixel(x, y);
if (colors.ContainsKey(c))
colors[c]++;
else colors.Add(c, 0);
}
}
}
}
catch
{
throw;
}
finally
{
// colors.Clear();
bmp.Dispose();
}
}
}
}