Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换简单的JavaScript代码_C#_Javascript - Fatal编程技术网

C# 转换简单的JavaScript代码

C# 转换简单的JavaScript代码,c#,javascript,C#,Javascript,我一直在尝试转换从图像中获得主色调的颜色,但迄今为止没有成功。我得到了colorCount和color变量的错误。我不知道用于这些变量的合适和等效的数据类型。这是我的密码: public string dominantColor(Bitmap img) { int[] colorCount = new int[0]; int maxCount = 0; string dominantColor = ""; // data is an ar

我一直在尝试转换从图像中获得主色调的颜色,但迄今为止没有成功。我得到了
colorCount
color
变量的错误。我不知道用于这些变量的合适和等效的数据类型。这是我的密码:

public string dominantColor(Bitmap img)
{
       int[] colorCount = new int[0];
       int maxCount = 0;
       string dominantColor = "";

       // data is an array of a series of 4 one-byte values representing the rgba values of each pixel
       Bitmap Bmp = new Bitmap(img);

       BitmapData BmpData = Bmp.LockBits(new Rectangle(0, 0, Bmp.Width, Bmp.Height), ImageLockMode.ReadOnly, Bmp.PixelFormat);
       byte[] data = new byte[BmpData.Stride * Bmp.Height];


       for (int i = 0; i < data.Length; i += 4) 
       {
            // ignore transparent pixels
            if (data[i+3] == 0)
                continue;

            string color = data[i] + "." + data[i+1] + "," + data[i+2];
            // ignore white
            if (color == "255,255,255")
               continue;

            if (colorCount[color] != 0)
               colorCount[color] = colorCount[color] + 1;
            else
               colorCount[color] = 0;

            // keep track of the color that appears the most times
            if (colorCount[color] > maxCount)
            {
                 maxCount = colorCount[color];
                 dominantColor = color.ToString;
            }
       }

       string rgb = dominantColor.Split(",");
       return rgb;   
}
公共字符串主色(位图img)
{
int[]colorCount=新int[0];
int maxCount=0;
字符串主导颜色=”;
//数据是一系列4个单字节值的数组,表示每个像素的rgba值
位图Bmp=新位图(img);
BitmapData BmpData=Bmp.LockBits(新矩形(0,0,Bmp.Width,Bmp.Height),ImageLockMode.ReadOnly,Bmp.PixelFormat);
字节[]数据=新字节[BmpData.Stride*Bmp.Height];
对于(int i=0;imaxCount)
{
maxCount=颜色计数[颜色];
显性颜色=color.ToString;
}
}
字符串rgb=dominantColor.Split(“,”);
返回rgb;
}

我将为您提供代码的完整托管版本:

static Color dominantColor(Bitmap img)
{
    Hashtable colorCount = new Hashtable();
    int maxCount = 0;
    Color dominantColor = Color.White;

    for (int i = 0; i < img.Width; i++)
    {
        for (int j = 0; j < img.Height; j++)
        {
            var color = img.GetPixel(i, j);

            if (color.A == 0)
                continue;

            // ignore white
            if (color.Equals(Color.White))
                continue;

            if (colorCount[color] != null)
                colorCount[color] = (int)colorCount[color] + 1;
            else
                colorCount.Add(color, 0);

            // keep track of the color that appears the most times
            if ((int)colorCount[color] > maxCount)
            {
                maxCount = (int)colorCount[color];
                dominantColor = color;
            }
        }
    }

    return dominantColor;
}
static Color-dominantColor(位图img)
{
Hashtable colorCount=新Hashtable();
int maxCount=0;
颜色主导色=颜色。白色;
对于(int i=0;imaxCount)
{
maxCount=(int)colorCount[color];
显性颜色=颜色;
}
}
}
返回主色;
}
那么这里有什么区别呢? -我使用一个哈希表而不是数组(你从来没有重新定义过它的维度——使用JavaScript中的可扩展对象的最好方法就是哈希表) -我更喜欢使用已经包含的结构颜色(为Alpha、红色、绿色和蓝色节省4个字节) -我还进行比较并返回此结构(然后您可以自由地执行任何您想执行的操作-在JavaScript中,使用这些字符串只是一种解决方法,因为浏览器只是为您提供这样的RGB(a)字符串)

代码中的另一个问题是包含byte[]data=new byte[BmpData.Stride*Bmp.Height]的行;-数组已创建并初始化,但没有数据(.NET将删除所有以前的数据,从而产生大量零)。因此,你不会在任何地方


我的版本的缺点是它确实非常小(这就是你们的锁具发挥作用的地方)。如果您愿意,我可以给您一个非托管版本(使用锁位和不安全块)。这取决于性能是否对您很重要,以及您是否感兴趣

到底是什么问题?你能再解释一下吗?
我的colorCount和color变量出现了错误
到底是哪个错误?@Fuex我从string到int的转换错误。基本上,我不确定我是否为color变量使用了正确的数据类型,我尝试了不同的数据类型,但仍然出现了转换错误。1。colorCount没有字符串索引器;2.colorCount是长度为0的int数组,因此colorCount[color]抛出错误我想这一行:
int[]colorCount=new int[0]
这一行:
string color=data[i]+“+data[i+1]+”,“+data[i+2]是错误的来源。这:
colorCount.Add(color,0)必须是:
colorCount.Add(color,1)是的,这是真的,但从何处开始并不重要,因为从未找到的颜色不会出现在哈希表中,并且每种颜色都必须以相同的数字开始(在本例中为0)。当您编写时,它不会出现问题,因为0基中最大的颜色也将是1基中最大的颜色,这只会让我抓狂。。。但是当我观看原始代码时,它总是返回0,不是吗?原始代码还是我的版本?原来的一个总是返回零,因为数组分配不正确(他只是通过一个空数组,结果根本没有计数-所以是的)。是的,我写了关于原来的一个。。。即使是数组也将被正确定义,
!=0
永远不会为真,因此每个项目都将为0