2013-02-15 2 views
1

PixelHeight 및 PixelWidth 속성을 가져 와서 가로 또는 세로 레이아웃이 있는지 여부를 확인할 수있는 BitmapImage가 있습니다. 레이아웃을 결정한 후에는 높이 : 너비를 왜곡하지 않고 이미지 뷰어 창에 맞도록 이미지의 높이 또는 너비를 설정해야합니다. 그러나 그것은 내 이미지로 무엇이든 할 수 BeginInit() 호출해야 나타납니다. PixelHeight 또는 PixelWidth 속성을 가져 오려면 EndInit()을 호출해야하며 동일한 BitmapImage 객체에서 BeginInit()을 두 번 이상 호출 할 수 없습니다. 그렇다면 이미지를 설정하고, 높이와 너비를 얻고, 방향을 결정한 다음 이미지의 크기를 조정하는 방법은 무엇입니까?BitmapImage PixelHeight 속성을 가져 오면 초기화 문제가 발생합니다.

다음

내가 작업 한 코드의 덩어리 :

경우 InvalidOperationException :

BitmapImage 초기화 내가 이것을 실행하면

image.BeginInit(); 
Uri imagePath = new Uri(path + "\\" + die.Die.ImageID + "_" + blueTape + "_BF.BMP"); 
image.UriSource = imagePath; 
//image.EndInit(); 
imageHeight = image.PixelHeight; 
imageWidth = image.PixelWidth; 
//image.BeginInit(); 
// If the image is taller than it is wide, limit the height of the image 
// i.e. DML87s and all non-rotated AOI devices 
if (imageHeight > imageWidth) 
{ 
    image.DecodePixelHeight = 357; 
} 
else 
{ 
    image.DecodePixelWidth = 475; 
} 
image.EndInit(); 

,이 런타임 예외가 완료되지 않았습니다. 초기화를 완료하려면 EndInit 메서드를 호출하십시오.

아무도이 문제를 해결하는 방법을 알고 있습니까?

+0

왜 'DecodePixelWidth' 또는'DecodePixelHeight'를 모두 설정해야합니까? 이미지를 적당한 크기의'Image' 컨트롤에 넣을 수는 없습니까? – Clemens

+0

원래 크기로 이미지를로드 한 다음 나중에 ScaleTransform을 사용하여 원하는 효과를 얻는 것이 더 쉬워 진 것 같습니다. –

+0

@Clemens : DecodePixel (높이/너비) 속성 (y/ies)을 설정하지 않으면 이미지가 정상 크기가되고 패널에 제대로 맞지 않습니다. 내 이미지는 이미지에 따라 1216x1616 또는 1616x1216입니다. 한면의 최대 길이가 475 픽셀보다 커야합니다. – kformeck

답변

2

내가 아는 한, 비트 맵을 두 번 디코딩하지 않으면 원하는 작업을 수행 할 수 없습니다.

비트 맵을 기본 크기로 디코딩 한 다음 필요에 따라 포함하는 Image 컨트롤의 크기를 설정하는 것이 훨씬 간단 할 것 같습니다. StretchUniform (이미지 컨트롤의 너비와 높이가 모두 설정되었으므로 StretchFill 또는 UniformToFill)로 설정되므로 비트 맵의 ​​크기는 적절하게 조정됩니다.

var bitmap = new BitmapImage(new Uri(...)); 

if (bitmap.Width > bitmap.Height) 
{ 
    image.Width = 475; 
    image.Height = image.Width * bitmap.Height/bitmap.Width; 
} 
else 
{ 
    image.Height = 475; 
    image.Width = image.Height * bitmap.Width/bitmap.Height; 
} 

image.Stretch = Stretch.Uniform; 
image.Source = bitmap; 
관련 문제