Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by Greyven · Feb 09, 2021 at 04:43 PM · colorimage

How to find the most present color in an image ?

Hello everyone, i'm trying to find the most present color in an image. My program is scanning all the pixels of an image and I wish it returns me the color that is the most present in the image. I have no apparent error, but when I run the program, unity seems to freeze or loop forever.
The problem is inside Colors.cs and within the function "MainColorFromTexture"
Can anyone help me please ?



EDIT:
Ok, i found the problem. This code is just not optimized at all. It runs correctly, but is just really slow with big pictures. The more colors there are and the more pixels there are inside the picture, and the more it will take time to complete. Sounds obvious said like that, but i didn't expect this code to be this slow.

The slow loop is inside colors.cs line 32.

Anyone could give me hints to optimize this ?


Here is my code :

DrawColor.cs

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
 public class DrawColor : MonoBehaviour
 {
     [SerializeField] private Texture2D tex2d;
     [SerializeField] private RawImage rImg;
     [SerializeField] private Colors co;
 
     private Color32 col;
 
     void Start()
     {
         //col = co.AverageColorFromTexture(tex2d);
         col = co.MainColorFromTexture(tex2d);
         rImg.color = col;
     }
 }



Colors.cs

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class Colors : MonoBehaviour
 {
     public Color32 AverageColorFromTexture(Texture2D tex)
     {
         Color32[] texColors = tex.GetPixels32();
         int total = texColors.Length;
         float r = 0;
         float g = 0;
         float b = 0;
 
         for (int i = 0; i < total; i++)
         {
             r += texColors[i].r;
             g += texColors[i].g;
             b += texColors[i].b;
         }
 
         return new Color32((byte)(r / total), (byte)(g / total), (byte)(b / total), 255);
     }
 
 
     public Color32 MainColorFromTexture(Texture2D tex)
     {
         Color32[] texColors = tex.GetPixels32();
         int total = texColors.Length;
         List<colNum> colNumList = new List<colNum>();
 
         for (int i = 0; i < total; i++)
         {
             if (colNumList.Count > 0)
             {
                 for (int j = 0; j < colNumList.Count; j++)
                 {
                     if (colNumList[j].col.Equals(texColors[i])) colNumList[j].quantity += 1;
                     else AddColNumToList(texColors[i], colNumList);
                 }
             }
             else AddColNumToList(texColors[i], colNumList);
         }
 
         Color32 col = new Color32();
         int quan = 0;
 
         foreach(colNum cn in colNumList)
         {
             if (cn.quantity > quan)
             {
                 col = cn.col;
                 quan = cn.quantity;
             }
         }
 
         col.a = 255;
 
         return col;
 
     }
 
     private void AddColNumToList(Color32 col, List<colNum> li)
     {
         colNum cn = new colNum();
         cn.col = col;
         cn.quantity = 1;
         li.Add(cn);
     }
 }
 
 public class colNum
 {
     public Color32 col;
     public int quantity;
 }


Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

156 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Colors get messed up when I click play 1 Answer

Black Image with custom material in "Game" when color is displayed in "Scene" 0 Answers

How to modify color.alpha in UI Image? 4 Answers

Sprite color is stuck after changing it in script 0 Answers

Change color of a Filled image from script 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges