Доброго времени суток!
Пытаюсь реализовать сабж, но не знаю, с чего начать.
Получилось изменить размеры и сохранить картинку в формате bmp, после чего я ее конвертил в JPEG при помощи ATL класса .
Вопрос 1 — как можно изменить размер картинки и сохранить ее только используя ?
Мучался с StretchBlt — так и не получилось (
Вопрос 2 — можно ли при помощи CImage сохранять изображения с приминением бикубической интерполяции?
Вот код, который я использую:
DEFINE_GUID(ImageFormatJPEG, 0xb96b3cae,0x0728,0x11d3,0x9d,0x7b,0x00,0x00,0xf8,0x1e,0xf3,0x2e);
#define HIMETRIC_INCH 2540 // HIMETRIC units per inch
// Загрузка изображения
CComPtr<IPicture> m_pPicture;
HRESULT hr = ::OleLoadPicturePath(L"3.jpg", NULL, 0, 0, IID_IPicture,(void**)&m_pPicture);
if (FAILED(hr))
{
MessageBox("error",0,0);
return 0;
}
long hmWidth = 0, hmHeight = 0;
m_pPicture->get_Width(&hmWidth);
m_pPicture->get_Height(&hmHeight);
RECT rc = {0, 0, 800, 600};
HDC dc = ::GetDC(0);
HDC memDC = ::CreateCompatibleDC(dc);
HBITMAP bm = ::CreateCompatibleBitmap(dc, (rc.right-rc.left), (rc.bottom-rc.top));
HBITMAP oldbm = (HBITMAP) ::SelectObject(memDC, bm);
::ReleaseDC(0, dc);
hr = m_pPicture->Render(
memDC, // [in] Handle of device context on which to render the image
rc.left, // [in] Horizontal position of image in hdc
rc.top, // [in] Vertical position of image in hdc
rc.right - rc.left, // [in] Horizontal dimension of destination rectangle
rc.bottom - rc.top, // [in] Vertical dimension of destination rectangle
0, // [in] Horizontal offset in source picture
hmHeight, // [in] Vertical offset in source picture
hmWidth, // [in] Amount to copy horizontally in source picture
-hmHeight, // [in] Amount to copy vertically in source picture
NULL // [in, optional] Pointer to position of destination for a metafile hdc
);
::SelectObject(memDC, oldbm);
::DeleteDC(memDC);
// Сохранение изображения
PICTDESC PictDesc;
PictDesc.cbSizeofstruct = sizeof(PICTDESC);
PictDesc.picType = PICTYPE_BITMAP;
PictDesc.bmp.hbitmap = bm;
PictDesc.bmp.hpal = NULL;
IPicture* iPic;
OleCreatePictureIndirect(&PictDesc, IID_IDispatch, FALSE, (LPVOID*) &iPic);
CComBSTR bstrFile = "1.bmp";
OleSavePictureFile((IDispatch*)iPic, bstrFile);
iPic->Release();
CImage f;
f.Load("1.bmp");
f.Save("1.jpg",ImageFormatJPEG);
DeleteFile("1.bmp");
Помогите разобраться плиз.
Спасибо.
... опыт приходит во время боя ...