Im пытаются выяснить, как рисовать прямые вертикальные линии в жестко закодированы растровый файл генерируется через с ++:Hard-кодированный растровый в 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 попадает в определенное число. Это, похоже, не так, так как это дает мне перекошенную линию, показанную ниже.
Просто для уточнения я копирую информацию заголовка растрового изображения из уже созданного растрового изображения, а затем просто создать сопроводительный массив пикселей, и изменение его оттуда.
BMPs должен быть дополнен кратным 4 пикселям. http://stackoverflow.com/questions/29440672/bmp-file-line-padding-issue –
Если ширина вашего изображения не равномерно делится на 4 (или 8), то из того, что я помню, вы должны сделать это поэтому, иначе вы получите эффект лестницы. – PaulMcKenzie
@RetiredNinja 4 байта, а не 4 пикселя. –