2013-07-19 3 views
1

WriteableBitmap에서 다른 부분으로 복사하는 방법은 무엇입니까 WriteableBitmap? 필자는 과거에 수십 개의 'copypixel'과 투명한 복사본을 작성하여 사용했지만 WPF C#과 동일한 것을 찾을 수 없습니다.어떻게 writeablebitmap의 일부를 다른 writeablebitmap에 복사 할 수 있습니까?

이것은 세계에서 가장 어려운 질문이거나 가장 쉬운 질문입니다. 아무도 10 피트 극으로 절대 접촉하지 않기 때문입니다.

+1

당신은'CopyPixels' /'WritePixels' 콤보와 의미? – JerKimball

+0

그게 효과가 있습니까? 나는 그 일이 끝난 것을 결코 보지 못했고 나는 찾고 있었다. 어떻게 할거 니? – zetar

답변

2

하나에서 다른 것으로 직접 복사하는 방법은 보이지 않지만 어레이를 사용하여 두 단계로 수행 할 수 있으며 CopyPixels을 사용하여 코드를 가져오고 WritePixels을 다른 것으로 가져 오면 두 단계로 수행 할 수 있습니다.

3

http://writeablebitmapex.codeplex.com/ 의 WriteableBitmapEx 사용 다음과 같이 Blit 메서드를 사용하십시오.

private WriteableBitmap bSave; 
    private WriteableBitmap bBase; 

    private void test() 
    { 
     bSave = BitmapFactory.New(200, 200); //your destination 
     bBase = BitmapFactory.New(200, 200); //your source 
     //here paint something on either bitmap. 
     Rect rec = new Rect(0, 0, 199, 199); 
     using (bSave.GetBitmapContext()) 
     { 
      using (bBase.GetBitmapContext()) 
      { 
       bSave.Blit(rec, bBase, rec, WriteableBitmapExtensions.BlendMode.Additive); 
      } 
     } 
    } 

대상의 정보를 유지할 필요가없는 경우 더 높은 성능을 위해 BlendMode.None을 사용할 수 있습니다. Additive를 사용할 때 소스와 대상 사이에 알파 합성을 얻습니다.

1

위의 Guy에게 가장 쉬운 방법은 WriteableBitmapEx 라이브러리를 사용하는 것입니다. 그러나 Blit 기능은 전경 및 배경 이미지를 합성하기위한 것입니다.

var DstImg = SrcImg.Crop(new Rect(...)); 

참고하여 SrcImg WriteableBitmap이 WriteableBitmapEx 라이브러리에 의해 운영되는 Pbgra32 형식이어야합니다 : 다른 WriteableBitmap 한 WriteableBitmap의 일부를 복사하는 가장 효율적인 방법은 자르기 기능을 사용하는 것입니다. 비트 맵이 양식에없는 경우에, 당신은 쉽게 자르기 전에 변환 할 수 있습니다

var tmp = BitmapFactory.ConvertToPbgra32Format(SrcImg); 
var DstImg = tmp.Crop(new Rect(...)); 
1
public static void CopyPixelsTo(this BitmapSource sourceImage, Int32Rect sourceRoi, WriteableBitmap destinationImage, Int32Rect destinationRoi) 
    { 
     var croppedBitmap = new CroppedBitmap(sourceImage, sourceRoi); 
     int stride = croppedBitmap.PixelWidth * (croppedBitmap.Format.BitsPerPixel/8); 
     var data = new byte[stride * croppedBitmap.PixelHeight]; 
     // Is it possible to Copy directly from the sourceImage into the destinationImage? 
     croppedBitmap.CopyPixels(data, stride, 0); 
     destinationImage.WritePixels(destinationRoi,data,stride,0); 
    }