Gifdecoder,BitmapSource and System.Windows.Controls::Image in mfc
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 3 of 3

Thread: Gifdecoder,BitmapSource and System.Windows.Controls::Image in mfc

Hybrid View

  1. #1
    Join Date
    Dec 2012
    Posts
    3

    Gifdecoder,BitmapSource and System.Windows.Controls::Image in mfc

    hi.
    first of all sorry for my bad english.
    i need make a CBitmap or a streamdata from a System.Windows.Controls::Image(rendered out put)in a SDI mfc application (supporting \clr).
    here is my codes:
    Code:
    using namespace System;
    using namespace System::IO;
    using namespace System::Collections::Generic;
    using namespace System::Windows;
    using namespace System::Windows::Controls;
    using namespace System::Windows::Media;
    using namespace System::Windows::Media::Imaging;
    using namespace System::Threading;
    using namespace System::Security;
    bool CGifdecoder::Decoder()  
    {
    UINT Stride;
    unsigned short *res;
    unsigned short Buff[ROW * COLUMN];
    BitmapSource^ bitmapSource ;
    String ^ str = gcnew String(Files[m_Current].Filepath);
    // Open a Stream and decode a GIF image
    Stream^ imageStreamSource = gcnew FileStream(str, FileMode::Open, FileAccess::Read, FileShare::Read);
    GifBitmapDecoder^ decoder = gcnew GifBitmapDecoder(imageStreamSource, BitmapCreateOptions::PreservePixelFormat, BitmapCacheOption::Default);              
    GifInfo[m_Current].Frames =  decoder->Frames->Count;
     for(int i = 0;i < GifInfo[m_Current].Frames;i++){
    Init_ReadDecodedBits();
    bitmapSource = decoder->Frames[i];
    bpp =  bitmapSource->Format.BitsPerPixel;
    Stride = (UINT)(bitmapSource->PixelWidth*(bitmapSource->Format.BitsPerPixel / 8) + 3) & (~3);//bitmapSource->PixelWidth * ((bitmapSource->Format.BitsPerPixel + 7) / 8);
    res = new unsigned short[bitmapSource->PixelHeight*bitmapSource->PixelWidth];
    			         IntPtr intptr = IntPtr(res); 
    			         bitmapSource->CopyPixels(System::Windows::Int32Rect::Empty
                 ,intptr,Stride*bitmapSource->PixelHeight, Stride);
    for(long j = 0;j<bitmapSource->PixelHeight*bitmapSource->PixelWidth;j++)
    	 Buff[j]=ReadParseData(bpp,res);
    //here i got unrendered codes from bitmapSource
    delete res;
      }
    }
    by this codes i can read datastream from bitmapSource but in this way somthing goes wrong in most of GIF animations.
    after debug i found out i need 3 more things too decode a gif animation - (x,y) position and size of each frame and disposal method for each one - finally i just found a way to draw tru images on a form window by this codes:
    Code:
    System::Windows::Window^ mainWindow;
    mainWindow = gcnew System::Windows::Window();
                   mainWindow->Title = "GIF Imaging Sample";
                   //ScrollViewer^ mySV = gcnew ScrollViewer();
    array<System::Byte>^ pixels = gcnew array<System::Byte>(bitmapSource->PixelHeight * Stride);
    bitmapSource = decoder->Frames[0];
    Image^ myImage = gcnew Image();
    myImage->Source = bitmapSource;
    myImage->Stretch = Stretch::None;
    myImage->Margin = System::Windows::Thickness(0);
    StackPanel^ myStackPanel = gcnew StackPanel();
    myStackPanel->Orientation = Orientation::Vertical;
    myStackPanel->VerticalAlignment = VerticalAlignment::Stretch;
    myStackPanel->HorizontalAlignment = HorizontalAlignment::Stretch;
    myStackPanel->Children->Add(myImage);
    // mySV->Content = myStackPanel;
    mainWindow->Content = myStackPanel;//mySV;
    mainWindow->Width = bitmapSource->PixelHeight;
    mainWindow->Height = bitmapSource->PixelHeight;
    //mainWindow->ResizeMode = System::Windows::ResizeMode::NoResize;
    mainWindow->Show();
    when i change
    Code:
    bitmapSource = decoder->Frames[0];
    to
    Code:
    bitmapSource = decoder->Frames[01];
    frame[1] has drawn perfectly on window(i think some how Image class takes care about - (x,y) position and size of each frame and disposal method for each one ),so im wonder if how can i make a CBitmap or a data stream from System.Windows.Controls::Image class to use in mfc app.
    best regards.

  2. #2
    Join Date
    Apr 1999
    Posts
    27,422

    Re: Gifdecoder,BitmapSource and System.Windows.Controls::Image in mfc

    Quote Originally Posted by d Rasool View Post
    hi.
    You're in the wrong forum. This forum is for non-Managed, traditional, C++ using the Visual C++ compiler. Your code is using Managed C++, which is an extension and is off-topic here.

    In other words, the code you posted here is gibberish when it comes to what is discussed in this forum (for example, those "^" symbols are totally alien to the C++ language in the context being used in your code).

    Please post in the Managed C++ forum as that forum deals with Managed C++ and .NET programming.

    Regards,

    Paul McKenzie

  3. #3
    Join Date
    Dec 2012
    Posts
    3

    Re: Gifdecoder,BitmapSource and System.Windows.Controls::Image in mfc

    thnx for reply

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  


Azure Activities Information Page

Windows Mobile Development Center


Click Here to Expand Forum to Full Width

This is a CodeGuru survey question.


Featured


HTML5 Development Center