문제


답변 주셔서 감사합니다. 실제로 나는 그리기 1024* 768 픽셀이 100* 100 픽셀보다 느린 속도가 느려지지 않습니다 ... 논리가 너무 간단합니다. 더 나은 알고리즘이 많고 디코더는 특정 해상도로 JPG에서 디코딩 할 수있는 것 같습니다. 정말 멋지다. 나는 언젠가 검색하지만이를 위해 무료 lib를 찾지 못한다 ...

정말 이상합니다! 페인트 방법에 다음 코드를 추가합니다. C : 1.JPG는 5M JPG 파일, 약 4000*3000입니다.

//--------------------------------------------------------------

HDC hdc = pDC->GetSafeHdc();
bitmap = Bitmap::FromFile(L"c:\\1.jpg",true);
Graphics graphics(hdc);
graphics.SetInterpolationMode( InterpolationModeNearestNeighbor );
graphics.DrawImage(bitmap,0,0,200,200);

위는 정말 빠릅니다! 실시간! 나는 5m JPG가 그렇게 빠를 수 있다고 생각하지 않습니다!

//--------------------------------------------------------------

HDC hdc = pDC->GetSafeHdc();
bitmap = Bitmap::FromFile(L"c:\\1.jpg",true);
Graphics graphics(hdc);
graphics.SetInterpolationMode( InterpolationModeNearestNeighbor );
graphics.DrawImage(bitmap,0,0,2000,2000);

위의 코드는 정말 느립니다

//--------------------------------------------------------------

BitMap = BitMap :: FromFile (l "C : 1.jpg", true를 추가하면; // 구성으로

떠나다

    Graphics graphics(hdc);
    graphics.SetInterpolationMode( InterpolationModeNearestNeighbor );
    graphics.DrawImage(bitmap,0,0,2000,2000);

onpaint 메소드에서 코드는 여전히 약간 느립니다 ~~~

//------------------------------------------------------------------

디코딩과 비교하여, 도덕적 프로세스는 정말 느립니다 ...

왜 그리고 어떻게 그렇게 했습니까? Microsoft는 DuskeAmage를 쓰는 혐의를받는 남성보다 Decoder 이중 급여를 담당하는 남성에게 지불 했습니까?

도움이 되었습니까?

해결책

8 배로 스케일링하는 경우 JPG를 해독 할 필요가 없습니다. JPG 이미지는 8 x 8 픽셀의 블록으로 구성됩니다. 이 블록의 평균값은 DCT의 0,0 계수입니다. 따라서 8 배의 축소는 단지 다른 모든 구성 요소를 버리는 문제 일뿐입니다. 더욱 스케일링 (예 : 4000-> 200)은 4000에서 500으로 스케일링 한 다음 일반적으로 500에서 200 픽셀로 스케일링하는 문제입니다.

다른 팁

그래서 당신이 정말로 궁금해하는 것은 그 이유입니다

graphics.DrawImage(bitmap,0,0,200,200);

보다 빠릅니다

graphics.DrawImage(bitmap,0,0,2000,2000);

옳은?

글쎄, 당신이 두 번째 케이스에서 100 배 더 많은 픽셀을 그 렸다는 사실은 그것과 관련이있을 수 있습니다.

디코딩이 필요할 때까지 연기 될 수 있습니다. 그것이 너무 빠른 이유입니다.

아마도 200x200의 경우 GDI+는 200x200을 페인트하기에 충분한 블록을 디코딩하고 2000x2000에서 더 해독 할 수 있습니다.

그래픽 루틴에는 항상 모호한 최적화가 포함되어 있습니다.

아마도 반사기 말해 줄까요?

추측 만하지만 4000x3000 또는 2000x1500으로 그리기를 시도해 볼 수 있습니까? 아마도 4000과 3000이 200만큼 나눌 수 있다는 사실은 전체 속도를 높이고 3000은 200 명으로 나눌 수 없을 것입니다 (실제로는 이상 할 것입니다).

일반적으로 프로파일 링 또는 시간 측정을 수행하십시오. 2000x2000이 200x200보다 약 100 배 느려지면 모든 것이 괜찮습니다. 그리고 2000x2000이 너무 느리면 귀찮게하지 마십시오. 화면이 1024x768 인 경우 전체 이미지를 볼 수 없으므로 화면에서 볼 수있는 이미지의 일부를 선택하고 그릴 수 있습니다. 1024x768은 2000x2000보다 5 배 빠릅니다.

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