2 votes

Rotation d'une image de type IImage* [Windows Mobile].

Avez-vous une idée de la façon dont je peux effectuer une rotation de 90 degrés sur cette image ? Voici mon extrait de code.

 HWND hwnd = GetActiveWindow();
HMODULE hmod = GetModuleHandle(NULL);
HRSRC hResInfo = FindResource(hmod,MAKEINTRESOURCE(IDR_JPEG2),_T("JPEG"));

DWORD imagesize = SizeofResource(hmod,hResInfo);
HGLOBAL hResData = LoadResource(hmod,hResInfo);
if(hResData == NULL)
    return -1;
LPVOID resptr = LockResource(hResData);

IImagingFactory *imgF = NULL;
IImage *iimg = NULL;
HDC hdc = pDC->GetSafeHdc();
int iWidth = GetSystemMetrics(SM_CXSCREEN);
int iHeight =  GetSystemMetrics(SM_CYSCREEN);

::CoInitializeEx(NULL, ::COINIT_MULTITHREADED);//Initializing the COM object. It is required before
if (CoCreateInstance(CLSID_ImagingFactory,NULL,CLSCTX_INPROC_SERVER,IID_IImagingFactory,(void **)&imgF) == S_OK)
{
    HRESULT hresult = imgF->CreateImageFromBuffer(resptr,imagesize,BufferDisposalFlagNone,&iimg);
    RECT rect;
    rect.bottom = iHeight;
    rect.left   = 0;
    rect.right  = iWidth;
    rect.top    = 0;

    if(iWidth > iHeight)    
    {
        //Rotation should take place here
    }
    iimg->Draw(hdc,&rect,NULL);
}

L'argument de cette fonction est du type CDC* pDC .

6voto

Igor Chornous Points 1058

C'est très facile à faire :

  1. On doit appeler 'QueryInterface' sur 'iimg' pour IBasicBitmapOps
  2. Compte tenu de son résultat, utilisez le Rotation méthode pour atteindre votre objectif

J'espère que cela vous aidera

2voto

TheGrimCoder Points 2285

En complément de la réponse de @kids_fox. Voici ce que j'ai fait pour accomplir la rotation. J'espère que cela aidera tous ceux qui ont été, sont ou seront confrontés à ce problème. Ajoutez ceci à la fonction de la question.

    IImage *pImage = NULL, 
    IBitmapImage *pBitmap = NULL; 
    IBitmapImage    *pBitmapRotated = NULL; //Rotated Bitmap                
    IBasicBitmapOps *pBasicBitmapOps = NULL; //BitmapOps
    HRESULT hr = S_FALSE
    if(pImgFactory->CreateBitmapFromImage(iimg ,0,0,PixelFormatDontCare,InterpolationHintDefault,&pBitmap) == S_OK)   
        {   
            if(pBitmap->QueryInterface( IID_IBasicBitmapOps, (void**)&pBasicBitmapOps ) == S_OK)   
            {   
                if(pBasicBitmapOps->Rotate( rotateDegree, InterpolationHintBilinear, &pBitmapRotated) == S_OK)   
                {   
                    hr = pBitmapRotated->QueryInterface(IID_IImage, ( void**)&pImage);   
                    pBitmapRotated->Release();   
                    pBitmapRotated = NULL;   
                }   
                pBasicBitmapOps->Release();   
                pBasicBitmapOps = NULL;   
            }   
            pBitmap->Release();            
            pBitmap = NULL;   
        } 
//Now Draw the image
pImage->Draw(hdc,&rect,NULL);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X