locked
How to get pixel bytes from ImageBrush using c++ in winRT RRS feed

  • Question

  • Hi,

     

    I am using winRT c++. I want to get pixel bytes from an ImageBrush object defined in xaml file like below. Do you know how to do this?

     

                <Rectangle x:Name="MyRect">
                    <Rectangle.Fill>
                        <ImageBrush Stretch="Fill" ImageSource="{StaticResource SampleImage}"/>
                    </Rectangle.Fill>
                </Rectangle>
    

     

    Thanks,

     

     

     


    Fan
    Friday, February 3, 2012 1:24 AM

Answers

All replies

  • Hi FanZ,

    There is no way to get the pixels from the brush. The Developer Preview does not provide any way to render a Xaml element to a bitmap. You will need to get the pixels from the original image.

    --Rob

    Friday, February 3, 2012 3:30 AM
    Moderator
  • Thanks Rob! The image is embedded as a resource in assembly, do you know in which way I could get pixel bytes out of the image resource? Thanks for your help.
    Fan
    Friday, February 3, 2012 6:52 PM
  • Hi Fan,

    You can load the image resource into a WriteableBitmap and then get its PixelBuffer. The hitch here is that there's an oversight in the Developer Preview such that there is no public way to access the PixelBuffer data from C++. If you search this forum for WriteableBitmap you should find more discussion of that.

    --Rob

    Friday, February 3, 2012 7:00 PM
    Moderator
  • I looked at WriteableBitmap. The msdn document says it has two constructors. One of the two takes BitmapSource as input parameter. However, when I go to dev11, only one constructor can be found, which takes two int as input. Don't know what happened. But it looks like the constructor won't help. Then I see WriteableBitmap has a method SetSource(IRandomAccessStream^ streamSource). However, it is not clear to me how this could be used. Could you give some guide?
    Fan
    Friday, February 3, 2012 7:21 PM
  • The WriteableBitmap(BitmapSource) constructor is known not to work. Use the size constructor instead. To load the bitmap call SetSource with the IRandomAccessStream you get from opening your bitmap file (or wherever you have the bitmap data).

    --Rob

     

    Saturday, February 4, 2012 2:12 AM
    Moderator
  • In my case, I have a BitmapSource, and I need to read / copy the pixel values.  In .NET and Silverlight, I was converting to WriteableBitmap using the constructor that takes BitmapSource.  In WinRT, how can I achieve the same functionality?
    Friday, June 1, 2012 10:22 PM