문제

로컬 네트워크 리소스의 대용량 이미지 파일(위성 이미지)을 표시하는 애플리케이션이 있습니다.이미지 렌더링 속도를 높이기 위해 이미지를 더 작은 패치로 나눕니다(예:6x6cm) 앱이 적절하게 타일을 배열합니다.하지만 위성영상이 업데이트될 때마다 분할 전처리를 해야 하는데 시간이 많이 걸리는 작업이다.

원본 파일에서 패치를 어떻게 로드할 수 있는지 궁금합니다.

추신 1:나는 LeadTools 라이브러리, 하지만 오픈 소스 솔루션이 필요합니다.

추신 2:앱이 .NET C#에 있습니다.

편집 1:형식은 우리에게 중요하지 않지만 현재는 JPG입니다.형식을 다른 형식으로 변경하는 것도 고려할 수 있지만 BMP 형식은 용량이 크기 때문에 거의 허용되지 않습니다.

도움이 되었습니까?

해결책

귀하의 질문에 대한 아름다운 답변을 작성했지만 브라우저가 그것을 먹어버렸습니다...:(

기본적으로 제가 말하려고 했던 것은 다음과 같습니다.

1.- Jpeg(및 대부분의 압축 형식)는 순차 압축을 사용하므로 항상 필요한 비트 이전의 모든 비트를 디코딩해야 합니다.
2.- 제가 제안하는 솔루션은 지원해야 하는 각 형식에 대해 수행되어야 합니다.
3.- 수정할 수 있는 오픈 소스 JPEG 디코더가 많이 있습니다.Jpeg 디코더는 8x8 크기의 픽셀 블록으로 변환되는 비트 블록(가변 크기)을 디코딩해야 합니다.당신이 할 수 있는 일은 필요한 블록만 메모리에 저장하고 더 이상 필요하지 않은 즉시(기본적으로 디코딩되는 즉시) 다른 모든 블록을 삭제하도록 코드를 수정하는 것입니다.메모리에 저장된 블록을 사용하여 필요한 이미지를 만드세요.
4.- Jpeg는 8x8 블록에서 작동하므로 8픽셀의 배수 크기 패치로 작업하면 작업이 더 쉬울 수 있습니다.
5.- 패치를 저장하고 블록을 완료하자마자 블록을 폐기하는 경우 jpeg 디코더에 대한 수정 사항을 사용하여 수행 중인 이미지의 전처리를 대체할 수 있습니다.정말 빠르고 메모리 소모도 적습니다.

많은 작업이 필요하고 고려해야 할 세부 사항이 많다는 것을 알고 있습니다(특히 컬러 이미지로 작업하는 경우). 하지만 성능이 필요하면 항상 싸움이나 놀이를 끝낼 것이라고 믿습니다(보고 싶은 대로). it) 바이트로.

도움이 되길 바랍니다.

다른 팁

나는 당신이 무엇을 추구하는지 100% 확신하지 못하지만 당신이 갈 방법을 찾고 있다면 string imagePath, Rectangle desiredPortion a System.Drawing.Image 그런 다음 아마도 다음과 같은 것입니다.

public System.Drawing.Image LoadImagePiece(string imagePath, Rectangle desiredPortion)
{
   using (Image img = Image.FromFile(path))
   {
       Bitmap result = new Bitmap(desiredPortion.Width, desiredPortion.Height, PixelFormat.Format24bppRgb);
       using (Graphics g = Graphics.FromImage((Image)result))
       {
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.DrawImage(img, 0, 0, desiredPortion, GraphicsUnit.Pixel);
       }
       return result;
   }
}

성능의 이유로 여러 번 호출하는 대신 한 번에 여러 출력 이미지를 구축하는 것을 고려할 수 있습니다. 아마도 직사각형 배열을 전달하고 이미지 또는 이와 유사한 배열을 되 찾을 수 있습니다.

그것이 당신이 뒤 따르는 것이 아니라면 당신이 실제로 찾고있는 것을 명확히 할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top