winapiでのjpegの拡大縮小について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
takatoshi

winapiでのjpegの拡大縮小について

#1

投稿記事 by takatoshi » 14年前

winapiでjpeg画像を拡大縮小するプログラムを作ろうとしています。
winapiではbitmapはAPI関数が用意されているのですが、jpegやgifなどは用意されていませんでした。
以下のソースでjpeg画像表示はできます。
この後、どう拡大縮小のプログラムを組めばいいのかわからなくて、詰んでしまいました。
どなたかこの問題を分かる人がいましたら、どうか教えてください。
お願いします。

コード:

#include<windows.h>
#include<olectl.h>

#define APP_NAME TEXT("JPEGファイル")
#define OJPEG "a.jpg"

HINSTANCE hInst;
HDC hMain;
HBITMAP hBitmap,Bitmap;
BITMAP bitmap;
char str[255];

void GetHandle(char File[255],HWND hWnd,HDC hdc){
    
    OLE_HANDLE hOle;
    IStream *iStream=NULL;
    IPicture *iPicture;
    HGLOBAL hMem;
    LPVOID pvData;
    DWORD nReadByte=0,nFileSize;
    HANDLE hFile;
    short type;

    hFile=CreateFile(File,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
    nFileSize=GetFileSize(hFile,NULL);
    hMem=GlobalAlloc(GMEM_MOVEABLE,nFileSize);
    pvData=GlobalLock(hMem);
        
    ReadFile(hFile,pvData,nFileSize,&nReadByte,NULL);
    
    GlobalUnlock(hMem);
    CloseHandle(hFile);
    
    CreateStreamOnHGlobal(hMem,TRUE,&iStream);
    
    OleLoadPicture(iStream,nFileSize,FALSE,&IID_IPicture,(LPVOID*)&iPicture);
    
    iStream->lpVtbl->Release(iPicture);
    
    iPicture->lpVtbl->get_Type(iPicture,&type);
    if(type==PICTYPE_BITMAP){
        iPicture->lpVtbl->get_Handle(iPicture,&hOle);
    }
    
    hBitmap=(HBITMAP)hOle;
    
    SelectObject(hMain,hBitmap);
    GetObject(hBitmap,sizeof(BITMAP),&bitmap);
    
}


LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
    
    HDC hdc;
    PAINTSTRUCT ps;
    HRSRC hRsrc;
    HANDLE hResorce;
    LPBITMAPINFO lpb;
    LPLOGPALETTE lpl;
    char FN[255];
    
    switch(uMsg){
        case WM_CREATE:
            hdc=GetDC(hWnd);
            hMain=CreateCompatibleDC(NULL);
            GetHandle(OJPEG,hWnd,hdc);
            return 0;
            
        case WM_PAINT:
            hdc=GetDC(hWnd);
            hdc=BeginPaint(hWnd,&ps);
            BitBlt(hdc,0,0,bitmap.bmWidth,bitmap.bmHeight,hMain,0,0,SRCCOPY);
            EndPaint(hWnd,&ps);
            
            return 0;
            
        case WM_DESTROY:
            DeleteDC(hMain);
            DeleteObject(hBitmap);
            PostQuitMessage(0);
            return 0;
    }
    
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
    
}


 

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: winapiでのjpegの拡大縮小について

#2

投稿記事 by ISLe » 14年前

BitBltの代わりにStretchBltを使ってください。

閉鎖

“C言語何でも質問掲示板” へ戻る