C# 统一:读取图像像素
我试图读取我的图像有多少像素。它的工作正常,但它返回了一个错误的像素数。这张图片总共有400个像素,我只得到256个像素C# 统一:读取图像像素,c#,unity3d,unity5,C#,Unity3d,Unity5,我试图读取我的图像有多少像素。它的工作正常,但它返回了一个错误的像素数。这张图片总共有400个像素,我只得到256个像素 private void Pixelreader() { // Load image Texture2D image = (Texture2D)Resources.Load(texture); Debug.Log(image); // Iterate through it's pixels for (int i = 0; i <
private void Pixelreader()
{
// Load image
Texture2D image = (Texture2D)Resources.Load(texture);
Debug.Log(image);
// Iterate through it's pixels
for (int i = 0; i < image.width; i++)
{
for (int j = 0; j < image.height; j++)
{
Color pixel = image.GetPixel(i, j);
// if it's a white color then just debug...
if (pixel == Color.white)
{
Debug.Log("Im white");
}
else
{
Debug.Log("Im black");
}
}
}
}
private void Pixelreader()
{
//加载图像
Texture2D image=(Texture2D)Resources.Load(纹理);
Debug.Log(映像);
//遍历它的像素
对于(int i=0;i
它正在印刷148张白纸和108张黑纸。。148 + 108 = 256. 所以有很多像素丢失了。你知道为什么它不读取400像素的完整图像吗?我认为问题在于其余像素不是黑色或白色,只是眼睛看不到的一点颜色。 尝试调试image.width*image.height以获取图像的像素计数 编辑:您可能应该查看图像检查器中的最大大小。它可能被锁定在256 ~Menno试试这个:
var whitePixels = 0;
var blackPixels = 0;
for (int i = 0; i < image.width; i++)
for (int j = 0; j < image.height; j++)
{
Color pixel = image.GetPixel(i, j);
// if it's a white color then just debug...
if (pixel == Color.white)
whitePixels++;
else
blackPixels++;
}
Debug.Log(string.Format("White pixels {0}, black pixels {1}", whitePixels, blackPixels));
var-whitePixels=0;
var-blackPixels=0;
对于(int i=0;i
非常确定您的输出行正在被截断
顺便说一句,“GetPixel”的速度是出了名的慢,但这是另一回事。它到底在哪里打印这些数字?在控制台中,我使用debug.logI表示代码中的位置。从你发布的内容来看,你打印的不是“我是白的”就是“我是黑的”,而且你根本不做任何计数。那么你的数字是从哪里来的呢?很确定你数错了,或者图像的分辨率不是你所相信的。对这段代码的快速测试表明,它在图像的每个像素中循环,没有问题,并且计数正确。调试时,
image.width
和image.height
是什么?他只测试像素是否为白色,其他每个像素(白色或非白色)都计为黑色,因为这只是一个else语句。哦,是的,完全忽略了这一点。奇怪。我在哪里可以看到最大尺寸?@Alex添加了屏幕截图。@Alex纹理的宽度和高度通常是2的幂。Unity可能正在自动执行转换。那么我可以用什么来代替GetPixel呢?GetPixel
对于Bitmap
对象来说速度非常慢,但我们不处理System.Drawing
。这是统一的,“图像”是一个Texture2D
对象,而不是位图
。无论您有什么不必要的函数调用、四个边界检查、两个乘法和一些加法-在每个像素上。对于小的纹理,只需指出即可。我会选择GetPixels。