2011-08-01 4 views
1

다음 코드가 btmSrc에 대해 null을 반환하는 이유는 무엇입니까?Image Control에서 BitmapSource 가져 오기

DrawingImage drawingElement =(DrawingImage)System.Windows.Application.Current.TryFindResource(name); 
System.Windows.Controls.Image image = new System.Windows.Controls.Image(); 
image.Source = drawingElement as ImageSource; 

BitmapSource btmSrc = image.Source as BitmapSource; 
+0

이보다 훨씬 많은 코드가 필요합니다. "이미지"란 무엇이며 어디에 정의되어 있습니까? –

답변

1

코드를 단순화 : DrawingImage으로

DrawingImage drawingElement = (DrawingImage)System.Windows.Application.Current.TryFindResource(name); 
BitmapSource btmSrc = drawingElement as BitmapSource; 

이 BitmapSource는 상속하지 않습니다, 결과는 null가됩니다.


나는 (이렇게하지 않는 복사 - 붙여 넣기 솔루션으로 의사로 이것을 가지고) 테스트하기 위해 DrawingImage이없는 있지만, 변환 코드는 다음과 같이 보일 것입니다 :

// Create a visual from a drawing 
DrawingVisual drawingVisual = new DrawingVisual(); 
drawingVisual.Drawing.Children.Add(drawingImage.Drawing); 

// Render it to a WPF bitmap 
var renderTargetBitmap = new RenderTargetBitmap(
    drawingVisual.Drawing.Bounds.Right, 
    drawingVisual.Drawing.Bounds.Bottom, 96, 96, PixelFormats.Pbgra32); 
renderTargetBitmap.Render(drawingVisual); 

// Create a bitmap with the correct size 
Bitmap bmp = new Bitmap(renderTargetBitmap.PixelWidth, 
    renderTargetBitmap.PixelHeight, PixelFormat.Format32bppPArgb); 
BitmapData data = bmp.LockBits(new Rectangle(Point.Empty, bmp.Size), 
    ImageLockMode.WriteOnly, PixelFormat.Format32bppPArgb); 
renderTargetBitmap.CopyPixels(Int32Rect.Empty, data.Scan0, 
    data.Height * data.Stride, data.Stride); 
bmp.UnlockBits(data); 

마지막을 일부는 다음에서 가져온 것입니다. Is there a good way to convert between BitmapSource and Bitmap?

+0

당신 말이 맞아요! 내가 뭘하려고했는지는 drawingElement에서 system.drawing.Bitmap을 생성한다. 그렇게 할 방법이 있습니까? – Strider007

+0

drawingElement가 null이 아니고, DrawingImage 대신 BitmapImage가 필요합니다 (이 경우 System.Drawing 유형에 대한 여러 변환이 있음).하지만 그렇지 않으면 리소스 룩업에 실패했음을 의미합니다. 던져 버렸어. –

+0

아니요 drawingElement가 null이 아닙니다. xaml 파일에 저장된 DrawingImage를 검색하고 있습니다. DrawingImage를 System.Drawing으로 변환하는 링크 나 아이디어를 저에게 제공하십시오. – Strider007

관련 문제