2013-08-21 4 views
0

저는 Silverlight를 사용하고 있습니다. 메모리에 많은 이미지 (약 10000)가로드되어 메모리 예외가 발생합니다. 크기, 해상도 및 이미지 재 샘플링을 통해 이미지 품질을 낮춰야합니다. 아래 코드를 확인하십시오.이미지 품질 줄이기

for(int i=0;i<10000;i++) 
{ 
    Image img = new Image() { Height = height, Width = width }; 
    img.Source = writableBimapimg; // returns WriteableBitmap 
    container.Children.Add(img);// throws memory exception 
} 

어떻게 이미지 품질을 낮출 수 있습니까?

감사

당신이 그렇지 않으면 당신이 느슨한 품질 및/또는 정보는 (내가 전에이 겪은) 이미지를 얻을 이미지에 필터를 적용 할 경우에만 이미지의 크기를 줄일 수 있습니다 모든
+0

정말로 모든 이미지가 한 번에 필요합니까? 내 이미지에 표시 할 각 이미지의 축소판을 만들 것입니다. 원래 이미지와 함께 저장할 것 인 미리보기 이미지. – Jehof

+0

예 .i 모두 한 번로드해야합니다. 원래 이미지 자체의 크기를 줄여야합니다. – sharmila

답변

1

첫 번째.

불행히도 Silverlight는 Bilinear, Trilinear 또는 Nearest Neighbor 필터링을 지원하지 않기 때문에 매우 좋은 플랫폼이 아닙니다.

Nearest Neighbor 필터를 사용하여 이미지 크기를 줄이려면 here 또는 Nuget Package로 ImageTools 라이브러리 (Created by Sebastian Stehle)를 추가 할 수 있습니다.

이미지의 크기를 조정하는 코드는 ImageTools를 사용하여 이와 유사 할 수 있습니다.

var extendedImage = writableBimapimg.ToImage(); //This is an extension from ImageTools. Make sure you have the "using ImageTools" in the namespaces; 
    var resizedImage = ExtendedImage.Resize(extendedImage, width, height, new ImageTools.Filtering.NearestNeighborResizer()); 
    container.Children.Add(resizedImage.ToBitmap()); 

이제 이러한 메모리 문제를 처리하려면 크기를 조정 한 이미지의 크기를 신중히 선택해야합니다.

계산기를 사용하여 2GB RAM을 사용한 후 프로세스가 충돌 함을 고려하여로드 할 수있는 이미지 수를 확인하십시오 (적어도 실버 4 이상인 경우).

픽셀 당 32 비트 및 100x100 픽셀의 크기 조정 이미지가 있으면 아무 문제없이 메모리에로드 된 수천 개의 이미지를 가질 수 있습니다.

희망이있었습니다.