如何阅读代码的描述

时间:2010-12-24 06:11:22

标签: c#

我发送一些c#代码,这是从imagealg.dll文件获取的,类名是diff代码,下面给出了如何获取此代码的描述。

public sealed class Diff
{
// Fields
private int diff;
private Bitmap overlayImage;
private Bitmap overlayImage1;

// Methods
public Diff()
{
}

public Diff(Bitmap overlayImage, Bitmap overlayImage1)
{
    this.overlayImage = overlayImage;
    this.overlayImage1 = overlayImage1;
}

public int Apply(Bitmap srcImg, Bitmap dstImg)
{
    int width = srcImg.Width;
    int height = srcImg.Height;
    int num3 = dstImg.Width;
    int num4 = dstImg.Height;
    PixelFormat format = (srcImg.PixelFormat == PixelFormat.Format8bppIndexed) ? PixelFormat.Format8bppIndexed : PixelFormat.Format24bppRgb;
    BitmapData data = srcImg.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, format);
    BitmapData ovrData = dstImg.LockBits(new Rectangle(0, 0, num3, num4), ImageLockMode.ReadOnly, format);
    this.ProcessFilter(data, ovrData, format);
    dstImg.UnlockBits(ovrData);
    srcImg.UnlockBits(data);
    return this.diff;
}

public void ApplyInPlace(Bitmap img)
{
    int width = img.Width;
    int height = img.Height;
    if (((img.PixelFormat != this.overlayImage.PixelFormat) || (width != this.overlayImage.Width)) || (height != this.overlayImage.Height))
    {
        throw new ArgumentException();
    }
    if ((img.PixelFormat != PixelFormat.Format8bppIndexed) && (img.PixelFormat != PixelFormat.Format24bppRgb))
    {
        throw new ArgumentException();
    }
    BitmapData bitmapdata = img.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
    img.UnlockBits(bitmapdata);
}

public int difference()
{
    return this.diff;
}

private unsafe void ProcessFilter(BitmapData data, BitmapData ovrData, PixelFormat fmt)
{
    int width = data.Width;
    int height = data.Height;
    int num3 = (fmt == PixelFormat.Format8bppIndexed) ? 1 : 3;
    int num4 = width * num3;
    int num5 = data.Stride - num4;
    byte* numPtr = (byte*) data.Scan0.ToPointer();
    byte* numPtr2 = (byte*) ovrData.Scan0.ToPointer();
    this.diff = 0;
    for (int i = 0; i < height; i++)
    {
        int num8 = 0;
        while (num8 < num4)
        {
            int num6 = numPtr[0] - numPtr2[0];
            string str = Convert.ToString(numPtr[0]);
            string str2 = Convert.ToString(numPtr2[0]);
            if (num6 != 0)
            {
                this.diff++;
            }
            num8++;
            numPtr++;
            numPtr2++;
        }
        numPtr += num5;
        numPtr2 += num5;
    }
}

// Properties
public Bitmap OverlayImage
{
    get
    {
        return this.overlayImage;
    }
    set
    {
        this.overlayImage = value;
    }
}
}

2 个答案:

答案 0 :(得分:2)

您最近收到的sounds like和/或被要求使用包含您不太了解的代码的库。不幸的是,如果没有正确记录来源,您只有两个选择:

  1. 回到任何地方或从中获取代码的地方,并向他们索取适当的文档。您收到的每一个源代码都应附带文档。

  2. 仔细研究代码并尝试弄清楚它在做什么以及如何使用它。这有点接近“逆向工程”库(除了你有源代码),它通常被保留作为最后的努力。

    事实上,如果我们中的任何人试图回答这个问题,我们所能做的就是阅读并解释您发布的代码。是否有某些具体的您不理解并正在寻求澄清?

  3. 最后,请记住这是对自己的一个教训。每当你编写代码时,请确保你花时间正确记录代码,这样你就不会让那些尝试使用你代码的人处于与你现在相同的情况。

答案 1 :(得分:0)

您会很高兴知道代码没有做任何特别重要的事情。 Apply方法设置并调用ProcessFilter,它会对两个图像进行比较,并返回两者之间不同的像素数。

ApplyInPlace方法无效。

我为那些继承了这段代码并且必须维护它的可怜程序员感到遗憾,那些有用的变量名称如num4num6

我最大的愿望是,将这种令人憎恶的程序员带入世界的行为已被永久禁止接触另一个键盘。