2011-02-04 12 views
7

मैं RenderTargetBitmap में दर्जनों दृश्य प्रस्तुत कर रहा हूं। प्रत्येक को अपने स्वयं के आय में प्रस्तुत किया जाता है। मैं क्या करना चाहता हूं कि RenderTargetBitmap इंस्टेंस से प्रस्तुत किए गए इन रेक्ट क्षेत्रों में से एक को लिखने योग्य बिटमैप के उसी क्षेत्र में कॉपी करना है ... फास्ट कॉपी रेक्ट पिक्सेल या smth। उसके जैसा।लिखने योग्य बिटमैप पर RenderTargetBitmap से bitblit कैसे करें?

तो, क्या रेन्डर टाइटलाइन बिटमैप से रेक्ट को कॉपी करने योग्य बिटमैप को एक तेज़ तरीके से कॉपी करने का कोई तरीका है?

अग्रिम धन्यवाद।

उत्तर

3

पूरे RenderTargetBitmap को कॉपी करके हल इस तरह WriteableBitmap के लिए:

protected override void OnRender(DrawingContext drawingContext) 
{ 
    if (ActualWidth == 0 || ActualHeight == 0) return; 
    // Create destination bitmap 
    wb = new WriteableBitmap((int) ActualWidth, (int) ActualHeight, 96, 96, PixelFormats.Pbgra32, null); 
    wb.Lock(); 
    rtb = new RenderTargetBitmap(wb.PixelWidth, wb.PixelHeight, wb.DpiX, wb.DpiY, PixelFormats.Pbgra32); 
    foreach (MyVisual visual in visuals) 
    { 
    visual.Render(rtb); 
    } 

    rtb.CopyPixels(new Int32Rect(0,0, rtb.PixelWidth, rtb.PixelHeight), 
    wb.BackBuffer, 
    wb.BackBufferStride * wb.PixelHeight, wb.BackBufferStride); 

    wb.AddDirtyRect(new Int32Rect(0, 0, (int)ActualWidth, (int)ActualHeight)); 
    wb.Unlock(); 

    drawingContext.DrawImage(wb, new Rect(0, 0, ActualWidth, ActualHeight)); 
} 
संबंधित मुद्दे