イムは、C++によって生成された:ハードコードされたビットマップ
#include <fstream>
using std::ifstream;
using std::ofstream;
#include <iostream>
using std::cout;
using std::endl;
int main()
{
ifstream infile ("white8x8.bmp");
ofstream outfile ("output.bmp");
char c;
cout << "Start of original read/write: " << endl;
for (int i = 0; i <= 53; i++)
{
infile.read (&c, 1);
cout << (int) c << ' ' << c;
outfile.write (&c, 1);
}
char z = 0;
char x = 0;
int j_prev = 0;
for (int i = 0; i <= 250; i++){
for (int j = 0; j <= 250; j++)
{
if(j == 10){
c = 0;
z = 0;
x = 0;
outfile.write (&c, 1);
outfile.write (&x, 1);
outfile.write (&z, 1);
j_prev = j;
}
/*if(j %250 == 0){
c = 0;
z = 0;
x = 0;
outfile.write (&c, 1);
outfile.write (&x, 1);
outfile.write (&z, 1);
}*/
else{
c = 255;
x = 255;
z = 255;
outfile.write (&c, 1);
outfile.write (&x, 1);
outfile.write (&z, 1);
}
}
}
cout << endl << "Start of read new file: " << endl;
infile.close();
outfile.close();
ifstream out2 ("output.bmp");
out2.seekg(53);
int count = 0;
for(int i = 53; i < 15000; i++){
out2.read(&c, 1);
cout << count << ":" << (int) c << ' ' << c;
count++;
}
out2.close();
return 0;
}
私はあなたがピクセルを見ることができると思うだろう配列を2次元配列として取得し、水平線を取得すると、jが特定の数値に達するたびにピクセルをプロットするだけで済みます。これはそうではないように見えるので、以下のような歪んだ線ができます。ただ、明確化のため
私は、単に添付画素配列を作成し、そこからそれを修正し、すでに作成したビットマップからビットマップのヘッダー情報をコピーしています。
BMPは、4ピクセルの倍数にパディングする必要があります。 http://stackoverflow.com/questions/29440672/bmp-file-line-padding-issue –
画像の幅が4(または8)で均等に割り切れない場合、私が覚えていることから、あなたはそれを作らなければなりませんそうでなければ、階段の効果を得ます。 – PaulMcKenzie
@ RetiredNinja 4バイトではなく4バイト。 –