本文整理汇总了C++中impl_from_IWICBitmapFrameEncode函数的典型用法代码示例。如果您正苦于以下问题:C++ impl_from_IWICBitmapFrameEncode函数的具体用法?C++ impl_from_IWICBitmapFrameEncode怎么用?C++ impl_from_IWICBitmapFrameEncode使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了impl_from_IWICBitmapFrameEncode函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: BmpFrameEncode_SetPixelFormat
static HRESULT WINAPI BmpFrameEncode_SetPixelFormat(IWICBitmapFrameEncode *iface,
WICPixelFormatGUID *pPixelFormat)
{
BmpFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
int i;
TRACE("(%p,%s)\n", iface, debugstr_guid(pPixelFormat));
if (!This->initialized || This->bits) return WINCODEC_ERR_WRONGSTATE;
if (IsEqualGUID(pPixelFormat, &GUID_WICPixelFormatBlackWhite))
*pPixelFormat = GUID_WICPixelFormat1bppIndexed;
else if (IsEqualGUID(pPixelFormat, &GUID_WICPixelFormat2bppIndexed))
*pPixelFormat = GUID_WICPixelFormat4bppIndexed;
for (i=0; formats[i].guid; i++)
{
if (IsEqualGUID(formats[i].guid, pPixelFormat))
break;
}
if (!formats[i].guid) i = 0;
This->format = &formats[i];
memcpy(pPixelFormat, This->format->guid, sizeof(GUID));
return S_OK;
}
示例2: JpegEncoder_Frame_Commit
static HRESULT WINAPI JpegEncoder_Frame_Commit(IWICBitmapFrameEncode *iface)
{
JpegEncoder *This = impl_from_IWICBitmapFrameEncode(iface);
jmp_buf jmpbuf;
TRACE("(%p)\n", iface);
EnterCriticalSection(&This->lock);
if (!This->started_compress || This->lines_written != This->height || This->frame_committed)
{
LeaveCriticalSection(&This->lock);
return WINCODEC_ERR_WRONGSTATE;
}
/* set up setjmp/longjmp error handling */
if (setjmp(jmpbuf))
{
LeaveCriticalSection(&This->lock);
return E_FAIL;
}
This->cinfo.client_data = jmpbuf;
pjpeg_finish_compress(&This->cinfo);
This->frame_committed = TRUE;
LeaveCriticalSection(&This->lock);
return S_OK;
}
示例3: BmpFrameEncode_WritePixels
static HRESULT WINAPI BmpFrameEncode_WritePixels(IWICBitmapFrameEncode *iface,
UINT lineCount, UINT cbStride, UINT cbBufferSize, BYTE *pbPixels)
{
BmpFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
HRESULT hr;
WICRect rc;
TRACE("(%p,%u,%u,%u,%p)\n", iface, lineCount, cbStride, cbBufferSize, pbPixels);
if (!This->initialized || !This->width || !This->height || !This->format)
return WINCODEC_ERR_WRONGSTATE;
hr = BmpFrameEncode_AllocateBits(This);
if (FAILED(hr)) return hr;
rc.X = 0;
rc.Y = 0;
rc.Width = This->width;
rc.Height = lineCount;
hr = copy_pixels(This->format->bpp, pbPixels, This->width, lineCount, cbStride,
&rc, This->stride, This->stride*(This->height-This->lineswritten),
This->bits + This->stride*This->lineswritten);
if (SUCCEEDED(hr))
This->lineswritten += lineCount;
return hr;
}
示例4: PngFrameEncode_SetPixelFormat
static HRESULT WINAPI PngFrameEncode_SetPixelFormat(IWICBitmapFrameEncode *iface,
WICPixelFormatGUID *pPixelFormat)
{
PngEncoder *This = impl_from_IWICBitmapFrameEncode(iface);
int i;
TRACE("(%p,%s)\n", iface, debugstr_guid(pPixelFormat));
EnterCriticalSection(&This->lock);
if (!This->frame_initialized || This->info_written)
{
LeaveCriticalSection(&This->lock);
return WINCODEC_ERR_WRONGSTATE;
}
for (i=0; formats[i].guid; i++)
{
if (memcmp(formats[i].guid, pPixelFormat, sizeof(GUID)) == 0)
break;
}
if (!formats[i].guid) i = 0;
This->format = &formats[i];
memcpy(pPixelFormat, This->format->guid, sizeof(GUID));
LeaveCriticalSection(&This->lock);
return S_OK;
}
示例5: PngFrameEncode_Commit
static HRESULT WINAPI PngFrameEncode_Commit(IWICBitmapFrameEncode *iface)
{
PngEncoder *This = impl_from_IWICBitmapFrameEncode(iface);
jmp_buf jmpbuf;
TRACE("(%p)\n", iface);
EnterCriticalSection(&This->lock);
if (!This->info_written || This->lines_written != This->height || This->frame_committed)
{
LeaveCriticalSection(&This->lock);
return WINCODEC_ERR_WRONGSTATE;
}
/* set up setjmp/longjmp error handling */
if (setjmp(jmpbuf))
{
LeaveCriticalSection(&This->lock);
return E_FAIL;
}
ppng_set_error_fn(This->png_ptr, jmpbuf, user_error_fn, user_warning_fn);
ppng_write_end(This->png_ptr, This->info_ptr);
This->frame_committed = TRUE;
LeaveCriticalSection(&This->lock);
return S_OK;
}
示例6: IcnsFrameEncode_AddRef
static ULONG WINAPI IcnsFrameEncode_AddRef(IWICBitmapFrameEncode *iface)
{
IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
ULONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) refcount=%u\n", iface, ref);
return ref;
}
示例7: BmpFrameEncode_Initialize
static HRESULT WINAPI BmpFrameEncode_Initialize(IWICBitmapFrameEncode *iface,
IPropertyBag2 *pIEncoderOptions)
{
BmpFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
TRACE("(%p,%p)\n", iface, pIEncoderOptions);
if (This->initialized) return WINCODEC_ERR_WRONGSTATE;
This->initialized = TRUE;
return S_OK;
}
示例8: PngFrameEncode_Commit
static HRESULT WINAPI PngFrameEncode_Commit(IWICBitmapFrameEncode *iface)
{
PngEncoder *This = impl_from_IWICBitmapFrameEncode(iface);
png_byte **row_pointers=NULL;
jmp_buf jmpbuf;
TRACE("(%p)\n", iface);
EnterCriticalSection(&This->lock);
if (!This->info_written || This->lines_written != This->height || This->frame_committed)
{
LeaveCriticalSection(&This->lock);
return WINCODEC_ERR_WRONGSTATE;
}
/* set up setjmp/longjmp error handling */
if (setjmp(jmpbuf))
{
LeaveCriticalSection(&This->lock);
HeapFree(GetProcessHeap(), 0, row_pointers);
return E_FAIL;
}
ppng_set_error_fn(This->png_ptr, jmpbuf, user_error_fn, user_warning_fn);
if (This->interlace)
{
int i;
row_pointers = HeapAlloc(GetProcessHeap(), 0, This->height * sizeof(png_byte*));
if (!row_pointers)
{
LeaveCriticalSection(&This->lock);
return E_OUTOFMEMORY;
}
for (i=0; i<This->height; i++)
row_pointers[i] = This->data + This->stride * i;
for (i=0; i<This->passes; i++)
ppng_write_rows(This->png_ptr, row_pointers, This->height);
}
ppng_write_end(This->png_ptr, This->info_ptr);
This->frame_committed = TRUE;
HeapFree(GetProcessHeap(), 0, row_pointers);
LeaveCriticalSection(&This->lock);
return S_OK;
}
示例9: BmpFrameEncode_SetResolution
static HRESULT WINAPI BmpFrameEncode_SetResolution(IWICBitmapFrameEncode *iface,
double dpiX, double dpiY)
{
BmpFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
TRACE("(%p,%0.2f,%0.2f)\n", iface, dpiX, dpiY);
if (!This->initialized || This->bits) return WINCODEC_ERR_WRONGSTATE;
This->xres = dpiX;
This->yres = dpiY;
return S_OK;
}
示例10: BmpFrameEncode_SetSize
static HRESULT WINAPI BmpFrameEncode_SetSize(IWICBitmapFrameEncode *iface,
UINT uiWidth, UINT uiHeight)
{
BmpFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
TRACE("(%p,%u,%u)\n", iface, uiWidth, uiHeight);
if (!This->initialized || This->bits) return WINCODEC_ERR_WRONGSTATE;
This->width = uiWidth;
This->height = uiHeight;
return S_OK;
}
示例11: BmpFrameEncode_Release
static ULONG WINAPI BmpFrameEncode_Release(IWICBitmapFrameEncode *iface)
{
BmpFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) refcount=%u\n", iface, ref);
if (ref == 0)
{
if (This->stream) IStream_Release(This->stream);
HeapFree(GetProcessHeap(), 0, This->bits);
HeapFree(GetProcessHeap(), 0, This);
}
return ref;
}
示例12: PngFrameEncode_Initialize
static HRESULT WINAPI PngFrameEncode_Initialize(IWICBitmapFrameEncode *iface,
IPropertyBag2 *pIEncoderOptions)
{
PngEncoder *This = impl_from_IWICBitmapFrameEncode(iface);
BOOL interlace;
PROPBAG2 opts[1]= {{0}};
VARIANT opt_values[1];
HRESULT opt_hres[1];
HRESULT hr;
TRACE("(%p,%p)\n", iface, pIEncoderOptions);
opts[0].pstrName = (LPOLESTR)wszPngInterlaceOption;
opts[0].vt = VT_BOOL;
if (pIEncoderOptions)
{
hr = IPropertyBag2_Read(pIEncoderOptions, 1, opts, NULL, opt_values, opt_hres);
if (FAILED(hr))
return hr;
}
else
memset(opt_values, 0, sizeof(opt_values));
if (V_VT(&opt_values[0]) == VT_EMPTY)
interlace = FALSE;
else
interlace = (V_BOOL(&opt_values[0]) != 0);
EnterCriticalSection(&This->lock);
if (This->frame_initialized)
{
LeaveCriticalSection(&This->lock);
return WINCODEC_ERR_WRONGSTATE;
}
This->interlace = interlace;
This->frame_initialized = TRUE;
LeaveCriticalSection(&This->lock);
return S_OK;
}
示例13: IcnsFrameEncode_SetSize
static HRESULT WINAPI IcnsFrameEncode_SetSize(IWICBitmapFrameEncode *iface,
UINT uiWidth, UINT uiHeight)
{
IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
HRESULT hr = S_OK;
TRACE("(%p,%u,%u)\n", iface, uiWidth, uiHeight);
EnterCriticalSection(&This->encoder->lock);
if (!This->initialized || This->icns_image)
{
hr = WINCODEC_ERR_WRONGSTATE;
goto end;
}
if (uiWidth != uiHeight)
{
WARN("cannot generate ICNS icon from %dx%d image\n", uiWidth, uiHeight);
hr = E_INVALIDARG;
goto end;
}
switch (uiWidth)
{
case 16:
case 32:
case 48:
case 128:
case 256:
case 512:
break;
default:
WARN("cannot generate ICNS icon from %dx%d image\n", This->size, This->size);
hr = E_INVALIDARG;
goto end;
}
This->size = uiWidth;
end:
LeaveCriticalSection(&This->encoder->lock);
return hr;
}
示例14: IcnsFrameEncode_Commit
static HRESULT WINAPI IcnsFrameEncode_Commit(IWICBitmapFrameEncode *iface)
{
IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
Handle handle;
OSErr ret;
HRESULT hr = S_OK;
TRACE("(%p)\n", iface);
EnterCriticalSection(&This->encoder->lock);
if (!This->icns_image || This->lines_written != This->size || This->committed)
{
hr = WINCODEC_ERR_WRONGSTATE;
goto end;
}
ret = PtrToHand(This->icns_image, &handle, This->size * This->size * 4);
if (ret != noErr || !handle)
{
WARN("PtrToHand failed with error %d\n", ret);
hr = E_FAIL;
goto end;
}
ret = SetIconFamilyData(This->encoder->icns_family, This->icns_type, handle);
DisposeHandle(handle);
if (ret != noErr)
{
WARN("SetIconFamilyData failed for image with error %d\n", ret);
hr = E_FAIL;
goto end;
}
This->committed = TRUE;
This->encoder->any_frame_committed = TRUE;
This->encoder->outstanding_commits--;
end:
LeaveCriticalSection(&This->encoder->lock);
return hr;
}
示例15: IcnsFrameEncode_SetResolution
static HRESULT WINAPI IcnsFrameEncode_SetResolution(IWICBitmapFrameEncode *iface,
double dpiX, double dpiY)
{
IcnsFrameEncode *This = impl_from_IWICBitmapFrameEncode(iface);
HRESULT hr = S_OK;
TRACE("(%p,%0.2f,%0.2f)\n", iface, dpiX, dpiY);
EnterCriticalSection(&This->encoder->lock);
if (!This->initialized || This->icns_image)
{
hr = WINCODEC_ERR_WRONGSTATE;
goto end;
}
end:
LeaveCriticalSection(&This->encoder->lock);
return S_OK;
}