BinaryReader를 사용하여 이미지의 바이트를 읽는 중 BinaryReader를 사용하여 비트 맵 이미지의 ARGB 값을 읽으려고 할 때 문제가 발생합니다. 누구든지 비트 맵 이미지의 각 픽셀에 대한 바이트 값을 얻을 수있는 방법을 제안 할 수 있습니까? 헤더에서 픽셀 형식을 파악하고 그에 따라 데이터를 올바르게 구문 분석을 포함 할 것이다 파일을 제대로 읽기 http://en.wikipedia.org/wiki/BMP_file_format : 사전C# 비트 맵 이미지의 색상 바이트 값을 읽는 데 BinaryReader 사용
현재 사용할 수있는 BMP 파일 형식을 연구해야합니다
0
A
답변
1
쉬운 방법은 안전하지 않은 컨텍스트를 사용하고 일부 비트를 잠그는 것입니다. 과도하게 단순화 샘플 : 당신은 여전히 BinaryReader를를 사용해야하고 당신이 얼마나 많은 바이트 픽셀 당 알고있는 경우
unsafe
{
var bitmapData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
byte* first = (byte*)bitmapData.Scan0;
byte a = first[0];
byte r = first[1];
byte g = first[2];
byte b = first[3];
...
bmp.UnlockBits(bitmapData);
}
그러나, 단지 헤더를 생략 할 수 있습니다 (당신이 찾을 수는 @Bradley_Ufffner의 링크 길이입니다) 바이트를 액세스하십시오. 당신이 BinaryReader를를 사용하여 비트 맵의 픽셀 데이터를 읽을해야하는 경우
0
에서
감사합니다. 파일은 구개음 처리 될 수 있습니다.이 경우 색상 표 데이터를 읽고이를 사용하여 픽셀을 실제 색상에 매핑해야합니다. 픽셀 데이터는 또한 압축 될 수 있으며 헤더의 값에 따라 추출되어야합니다.
이것은 단순한 프로젝트가 아니며, 그래픽 라이브러리가 발명 된 이유입니다.
0
, UnmanagedMemoryStream 시도 :
Bitmap bmp = new Bitmap("img.bmp");
var bits = bmp.LockBits(new Rectangle(0,0,bmp.Width,bmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
try{
unsafe{
using(Stream bmpstream = new UnmanagedMemoryStream((byte*)bits.Scan0, bits.Height*bits.Stride))
{
BinaryReader reader = new BinaryReader(bmpstream);
for(int y = 0; y < bits.Height; y++)
{
bmpstream.Seek(bits.Stride*y, SeekOrigin.Begin);
for(int x = 0; x < bits.Width; x++)
{
byte b = reader.ReadByte();
byte g = reader.ReadByte();
byte r = reader.ReadByte();
byte a = reader.ReadByte();
}
}
}
}
}finally{
bmp.UnlockBits(bits);
}
관련 문제
- 1. 비트 맵 이미지의 특정 부분에서 색상 변경
- 2. 비트 맵 이미지의 픽셀 색상을 C#
- 3. C#의 비트 맵 바이트 조작
- 4. 변환 비트 맵 바이트
- 5. 비트 맵 색상 반전
- 6. 안드로이드 비트 맵 : getPixel() 색상
- 7. Android 비트 맵 바이트 배열
- 8. jpeg 바이트 배열과 비트 맵 바이트 배열의 차이점
- 9. 색상 또는 흑백 비트 맵 이미지의 레벨을 얻고 표시하는 방법
- 10. 비트 맵 픽셀을 반복하여 안드로이드의 비트 맵 색상 변경
- 11. 12 비트 색상 값을 8 비트 색상 값으로 변환 C++
- 12. 색상 닷지 블렌드 비트 맵
- 13. Android : 비트 맵 색상 지정
- 14. 일반 BinaryReader
- 15. C++ 비트 맵 이미지의 픽셀 읽기 및 편집
- 16. ReadInt32, BinaryReader, C++
- 17. 색상 값을 읽는 방법?
- 18. 안드로이드, 비트 맵 (NDK + 알파 바이트) 사용 : 나는 무엇인가 놓친다?
- 19. 비트 맵 경계 사각형 알고리즘 C++
- 20. MFC를 사용하여 비트 맵 이미지의 픽셀 조작
- 21. GDI + 비트 맵 사용
- 22. 비트 맵
- 23. C++에서 비트 맵 생성
- 24. C# 비트 맵 이미지, 바이트 배열 및 스트림!
- 25. BufferSize에 따라 다른 길이의 데이터를 읽는 BinaryReader
- 26. C# 다른 비트 맵 위에 비트 맵 그리기
- 27. 색인화 된 색상 비트 맵 크기 조정 및 색상 유지
- 28. 함수를 사용하여 비트 맵 색상 변경
- 29. 비트 맵 (데이터)의 가장 일반적인 색상
- 30. 안드로이드에서 비트 맵 이미지의 픽셀에 액세스하는 방법?
쉬운 방법 : 사용하는 getPixel (x, y)의 비트 맵 (저속), 비트 맵 사용하여 포인터 (고급 읽기의 방법하지만, 빨리) –
비트 맵 함수가 아니라 BinaryReader를 사용하는 방법을 알고 있습니까? –
http://www.codeproject.com/Questions/308076/Read-bitmap-file-using-binary-reader-in-csharp 제 2 해결책을 읽어보십시오 –