내 스마트 폰 용 맵 소프트웨어를 작성 중이므로 부분 만있을 때 (큰) 이미지 파일을 메모리에 모두로드하고 싶지 않은 문제가 발생했습니다. 표시됩니다.C#의 디스크에서 Bitmap 하위 섹션을 읽습니다.
x 및 y 오프셋 및 너비를 알고 있다면 큰 이미지의 하위 섹션 (볼 수있는 부분) 만 읽을 수 있습니까? 한 번에 한 바이트 씩 파일을 읽음으로써 아마도 그렇게 할 수 있을지는 모르지만 어떻게해야할지 모르겠습니다.
는 니코 감사내 스마트 폰 용 맵 소프트웨어를 작성 중이므로 부분 만있을 때 (큰) 이미지 파일을 메모리에 모두로드하고 싶지 않은 문제가 발생했습니다. 표시됩니다.C#의 디스크에서 Bitmap 하위 섹션을 읽습니다.
x 및 y 오프셋 및 너비를 알고 있다면 큰 이미지의 하위 섹션 (볼 수있는 부분) 만 읽을 수 있습니까? 한 번에 한 바이트 씩 파일을 읽음으로써 아마도 그렇게 할 수 있을지는 모르지만 어떻게해야할지 모르겠습니다.
는 니코 감사당신의 이미지에 저장됩니다 어떤 형식 (들)에 부분적으로 적어도 의존하는 것입니다. 당신은 RAW 이미지 파일이나 비트 맵이 있다면, 그것은 가능할 수 있지만, 당신을 경우 데이터가 JPEG 또는 PNG와 같은 방식으로 압축되면 하위 섹션을 읽는 것이 훨씬 더 어려워 질 것입니다.
정말로 전체 데이터를 메모리에로드하고 싶지 않으면 파일을 읽는 사용자 고유의 IO 루틴을 작성해야합니다. BMP보다 복잡한 것이면 감압 알고리즘이 복잡해질 수 있습니다.
이미지를 미리 섹션으로자를 수 없습니까?
여러 개의 256x256 픽셀 이미지로 분할하면 두 개의 이미지를로드하고 볼 수있는 캔버스 위로 다시 스티칭해야합니다. 하나의 구현 이름을 짓기 위해 - Google지도는이 기술을 사용합니다. 그것은 BMP 파일이 있다면
이 내가 비트 맵했던 뭔가 ...
public BitmapCropBitmap(BitMap fullBitmap, Rectangle rectangle)
{
return proBitmap.clone(fullBitmap, rectangle, fullBitmap.PixelFormat);
}
먼저 전체 비트 맵을 로딩해야합니다. –
, 그 어렵지 않을 것이다.
먼저 파일에서 헤더를 읽습니다. 정확히 44 바이트를 기억하지만 웹에서 사양을 검색하는 것으로 확인할 수 있습니다.
헤더에는 픽셀 당 몇 바이트, 총 너비 및 높이, 스캔 라인 당 얼마나 많은 바이트 같은 정보가 들어 있습니다. 일반적으로 비트 맵은 거꾸로 저장되므로 파일의 어디에서 첫 번째 픽셀이 왔는지 계산하고 그 위치로 건너 뜁니다. 그런 다음 해당 라인에서 원하는 픽셀을 읽고 다음 라인의 올바른 픽셀로 건너 뜁니다.
FileStream
클래스에는 필요한 것이 있습니다. 판독을위한 방법은 Read
이고 주어진 위치로 건너 뛰는 방법은 Seek
이다.
그러나 자원을 저장하고 싶지는 않습니다. 메모리가 제한된 장치 (또는 어쩌면)가 압축되지 않은 형식으로 저장됩니다. 공간 낭비이고 디스크/플래시에서로드하는 속도가 훨씬 느립니다. –
모든 답변 주셔서 감사합니다! 나는이 접근법을 살펴볼 것이다. 기본적으로 나는 많은 256x256 청크에서 큰 이미지를 꿰매었다. 그런 다음 GPS 수신기에서 위도/경도 데이터를 가져 와서 화면에 표시 할 이미지 덩어리를 결정해야하는 문제가있었습니다. 이렇게하기 위해 작은 이미지를 하나의 큰 이미지에 꿰매 붙 였기 때문에 제 3의 파티 도구를 통해 실행할 수 있었기 때문에 정확한 점/길이 변환이 적용된 .map 파일을 만들 수있었습니다 (소수의 알려진 점으로 캘리브레이션 한 후). 나는 그다지 괴롭 히지 않을 것이다. 그러나 게으르지 만 ma –
대신에 기존의 일부 맵을 사용하면 마지막 코멘트에 공간이 부족합니다. 모든 의견을 주셔서 감사합니다, 나는 작은 덩어리를 유지하려고합니다. 그러면 도전 과제는 gps 코드를 기반으로 사용할 코드를 결정하는 것입니다. lat/long에서 상상하는 픽셀로 일종의 변환을 써야 할 것입니다. –
나는 이것이 올바른 해결책이라고 말할만큼 멀리 갈 것입니다. 이미지 크기를 양면에 2의 배수로 유지하십시오 (아마도 256x256 또는 512x512). –
@ 280Z28 : 수정을위한 ta –
이미 큰 이미지를 구성하는 256x256 청크가 있습니다. 그것들을 하나의 이미지로 합쳐서 gps지도 소프트웨어를 통해 올바른 위도/경도로 GPS지도로 변환 할 수있게했습니다. 위도와 경도를 사용하여로드 할 256x256 청크를 찾을 수있을 것 같습니다. 나는 수학에 대해 약간의 독서를해야 할 것입니다, 그것은 내가 처음에 GPS 소프트웨어에 그 비트를 위임 한 이유입니다 :) –