-1

(double) の行列を unsigned char に変換しようとしているので、.pmg ファイルに書き込むことができます... しかし、うまくいきません。

void writePNG(vector<double>& matrix)
{
vector<unsigned char> image;
ofstream myfile;

myfile.open("newFile.txt", ios::out); // writing to .txt file for now for testing.

if(!myfile.is_open())
{
    cout << "Cannot open file";
}
for(int i=0; (i < 512*512); i++)
{
    image[i] = (unsigned char) matrix[i];
}

myfile.close();
}

データを変換しません。何か案は??ありがとう :)

4

3 に答える 3

2
  • バグ: サイズ 0 のベクトルを作成してから、存在しない要素に書き込みを行っています。
  • バグ: データをファイルに書き込むことはありません
  • style : 不必要にファイルを閉じます。fstreamオブジェクトが範囲外になると閉じられます
  • style : ループでデータをコピーします。を使用vector::vectorすると、意図がより明確に表示されます。
  • 潜在的なバグ: 入力ベクトルのサイズに関係なく、512x512 の出力ベクトルを作成します。
  • SSCCEテストケースが不完全です。

これを試して:

#include <vector>
#include <iostream>
#include <fstream>

void writePNG(const std::vector<double>& matrix)
{
  std::ofstream myfile("newFile.txt", std::ios::out); 

  if(!myfile.is_open())
  {
    std::cout << "Cannot open file";
  }
  std::vector<unsigned char> image (matrix.begin(), matrix.end());
  myfile.write(reinterpret_cast<const char*>(&image[0]), image.size());
}

int main () {
  writePNG({
    72, 101, 108.1, 108.2,
    111, 0x2c, 0x20, 0x77,
    0x6f, 0x72, 0x6c,
    100.3,  10.4});
}
于 2012-04-11T15:08:58.713 に答える
0

画像ベクトルのサイズはゼロです。要素を追加するには、少なくとも push_back を実行する必要があります。また、double のサイズは char のサイズと同じではないため、情報が失われます。

于 2012-04-11T14:48:07.657 に答える