BMP ファイルは (ピクセル単位で) 下から上に書き込まれるため、BMP ファイルを逆方向に読み取る (そして 54 バイトのヘッダーを取り除く) 必要があります。これまでの私のコード:
public string createNoHeaderBMP(string curBMP) //copies everything but the header from the curBMP to the tempBMP
{
string tempBMP = "C:\\TEMP.bmp";
Stream inStream = File.OpenRead(curBMP);
BinaryReader br = new BinaryReader(inStream);
byte[] fullBMP = new byte[(width * height * 3) + 138];
byte[] buffer = new Byte[1];
long bytesRead;
long totalBytes = 0;
while ((bytesRead = br.Read(buffer, 0, 1)) > 0)
{
fullBMP[fullBMP.Length - 1 - totalBytes] = buffer[0];
totalBytes++;
}
FileStream fs = new FileStream(tempBMP, FileMode.Create, FileAccess.Write);
fs.Write(fullBMP, 54, fullBMP.Length - 54);
fs.Close();
fs.Dispose();
return tempBMP;
}
何らかの理由でジョブを完全に実行できず、右側の一部が左側に配置された画像になります。ファイルを完全に逆にしないのはなぜですか? また、これらの BMP ファイルは非常に大きい (600 MB) ため、「メモリ不足」例外が発生するため、単純なメモリ ストリームを使用してシーク アンド スワップ操作を行うことはできません。