0

所以,我有以下脚本将图像转换为二进制文件(所以我可以把它放在一个 blob 上):

public static byte[] ImagemBin(string imagePath, int imagem_comp)
    {

        FileStream fileStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
        byte[] buffer = new byte[imagem_comp];

        int numBytesToRead = imagem_comp;
        int numBytesRead = 0;
        while (numBytesToRead > 0)
        {
            // Read may return anything from 0 to numBytesToRead.
            int n = fileStream.Read(buffer, numBytesRead, numBytesToRead);

            // Break when the end of the file is reached.
            if (n == 0)
                break;

            numBytesRead += n;
            numBytesToRead -= n;
        }
        numBytesToRead = buffer.Length;

       fileStream.Read(buffer, 0, numBytesToRead);

        fileStream.Close();
        return buffer;
    }

其中imagePath是图片在电脑中的位置,imagem_comp是图片的大小。但是,图像转换不完整,几个字节后,它返回唯一的0...

那么,对此有什么帮助吗?

先感谢您。

4

2 回答 2

0

你应该解释你想要完成的事情。imagem_comp应该是什么?我发现您的逻辑有以下错误。

  1. 您在每次迭代中覆盖缓冲区而不用它做任何事情。
  2. 您从这一行要读取的字节数中减去读取的字节数numBytesToRead -= n;。一次读取后,您将只要求读取 0 个字节。
  3. 您使用与循环外第一次迭代基本相同的数据再次覆盖缓冲区。
  4. 假设上述所有内容都已修复,如果文件包含的字节数多于imagem_comp.

正如上面评论中的@bmm6o 所述,您应该可以将其替换为File.ReadAllBytes

于 2012-04-11T19:58:26.860 回答
0

它似乎适用于这个版本:

public static byte[] ImagemBin(string imagePath, int imagem_comp)
{

    FileStream fileStream = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
    byte[] buffer = new byte[imagem_comp];

    int numBytesToRead = imagem_comp;
    int numBytesRead = 0;
    while (numBytesToRead > 0)
    {
        // Read may return anything from 0 to numBytesToRead.
        int n = fileStream.Read(buffer, numBytesRead, numBytesToRead);

        // Break when the end of the file is reached.
        if (n == 0)
            break;

        numBytesRead += n;
        numBytesToRead -= n;
    }

    fileStream.Close();
    return buffer;
}

即删除行:

numBytesToRead = buffer.Length;

fileStream.Read(buffer, 0, numBytesToRead);

也就是说,我同意其他人提到的;考虑使用 ReadAllBytes。:-)

于 2012-04-11T20:08:41.977 回答