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);
}