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;
        }
        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;。1回の読み取りの後、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 に答える