C#에서 WinForm 응용 프로그램을 만들어서 파일의 24 비트 비트 맵을 "스니핑 (sniff out)"하는 데 사용할 수 있습니다. 필자는 오프셋, 파일에 기록되는 방법에 대한 분석 및 파일 길이와 같은 정보를 이미 수집했습니다. 파일에 대한바이트에서 BMP 만들기
그래서 자세한 내용은 다음과 같습니다
- BMP 데이터가 역으로 기록됩니다. (실시 예 (255 0 0) (0 0 255)
- 그것은 더 BMP 헤더가 없음을 기입 BMP의 화상 데이터 만 청크
- PixelFormat 24 비트
- 그 BMP 순수한 마젠타 (255.... RGB 0 255)
나는 다음과 같은 코드를 사용하고 있습니다.
using (FileStream fs = new FileStream(@"E:\MyFile.exe", FileMode.Open))
{
int width = 190;
int height = 219;
int StartOffset = 333333; // Just a sample offset
Bitmap tmp_bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Rectangle rect = new Rectangle(0, 0, tmp_bitmap.Width, tmp_bitmap.Height);
System.Drawing.Imaging.BitmapData bmpData =
tmp_bitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
tmp_bitmap.PixelFormat);
unsafe
{
// Get address of first pixel on bitmap.
byte* ptr = (byte*)bmpData.Scan0;
int bytes = width * height * 3; //124830 [Total Length from 190x219 24 Bit Bitmap]
int b; // Individual Byte
for (int i = 0; i < bytes; i++)
{
fs.Position = StartOffset - i; // Change the fs' Position [Subtract since I'm reading in reverse]
b = fs.ReadByte(); // Reads one byte from its position
*ptr = Convert.ToByte(b); // Record byte
ptr ++;
}
// Unlock the bits.
tmp_bitmap.UnlockBits(bmpData);
}
pictureBox1.Image = tmp_bitmap;
}
나는이 출력을 얻을를 나는 이유는 다음 줄을 칠 때마다 바이트가 엉망지고 있다고 생각합니다. (255 0 255는 0 255 255가되고 그것이 될 때까지 계속됩니다 ES 255 255 0)
난 당신이 나에게이 문제를 해결하는 데 도움 수 있기를 바랍니다. 대단히 감사드립니다.
솔루션 는 지금은
if (width % 4 != 0)
if ((i + 1) % (width * 3) == 0 && (i + 1) * 3 % width < width - 1)
ptr += 2;
가 대단히 감사합니다 (제임스 Holderness에 의해 주어진 나의 친구 및 정보로부터 약간의 도움으로)이 코드를 추가하여 고정!
문제는 비트 맵 데이터 픽셀이 서로 이어지는 경우 코드에서 bmpData.Stride를 사용하지 않는다고 생각되지만 라인을 변경할 때 픽셀에 속하지 않는 다른 데이터가있을 수 있습니다. 그래서 모든 것이 잘못되어,이 문제에 대한 답변을 게시 할 것입니다. – Mehran