none
Rotar Cimage y CBitmap RRS feed

  • Pregunta

  • Buenas tardes,

    Tengo un código en el cual obtengo una imagen de una memoria x, la coloco en un bitmap y posteriormente la guardo en la unidad C.

    Necesito mostrar la imagen rotada en ambas partes, tanto en el picturebox como en la imagen que guardo, he investigado un poco pero la verdad es que soy novato en c++ y no se como hacerlo a partir de esto.

    Aqui el codigo:

    void CIdsSimpleLiveDlg::OnBnClickedButton2()
    {
    CBitmap bmp;

    //Reserva espacio de memoria
    if (bmp.CreateBitmap(m_nSizeX, m_nSizeY, 1, m_nBitsPerPixel, m_pcImageMemory))
                {

                    CDC *pdc = GetDC();
                    if (pdc != NULL)
                    {
                        // Creamos el bitmap
                        CDC dcBmp;
                        if (dcBmp.CreateCompatibleDC(pdc) != NULL)
                        {
                            //if (dcBmp.SelectObject(&bmp) != NULL)
    if (dcBmp.SelectObject(&bmp) != NULL)
                            {
                                pdc->SetStretchBltMode(COLORONCOLOR);


                                // Obtenemos la posicion del picture donde sera enviada la imagen
                                CRect rect;
                                GetDlgItem(IDC_DIS)->GetWindowRect(&rect);
                                ScreenToClient(&rect);

                                // Leemos el tamaño de imagen
                                IS_RECT rectAOI;
                                INT nRet = is_AOI(m_hCam, IS_AOI_IMAGE_GET_AOI, (void*)&rectAOI, sizeof(rectAOI));


                                // dibujamos la imagen el el picture
                                pdc->StretchBlt(rect.left, rect.top, rect.Width(), rect.Height(),
                                &dcBmp, 0, 0, rectAOI.s32Width, rectAOI.s32Height, SRCCOPY);

       //Guardamos la imagen
       CImage img;
       img.Attach((HBITMAP)bmp.Detach());
       img.Save(_T("C:\\atest.bmp"),Gdiplus::ImageFormatBMP);


                                // delete the bitmap
                                dcBmp.DeleteDC();
                            }
                            else
                            {
                                OutputDebugString("dcBmp.SelectObject() failed");
                            }
                        }
    }
    }
    }

    Saludos y gracias de antemano.

    viernes, 22 de marzo de 2013 23:58

Todas las respuestas

  • Puedes hacerlo con BitBlt.

    Te dejo un par de ejemplos:

    http://stackoverflow.com/questions/3130051/how-to-rotate-a-bitmap-image-in-c-using-mfc

    http://www.codeguru.com/cpp/g-m/bitmap/specialeffects/article.php/c1743/Rotate-a-bitmap-image.htm


    MVP Visual C++ - Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/

    viernes, 24 de mayo de 2013 11:20
    Moderador