mirror of
https://github.com/rizonesoft/Notepad3.git
synced 2026-06-14 21:09:05 +08:00
88 lines
3.4 KiB
C
88 lines
3.4 KiB
C
/*
|
|
Resample
|
|
|
|
Carlo Pallini, Dec. 2007
|
|
|
|
Original Source: https://www.codeproject.com/Articles/22271/Plain-C-Resampling-DLL
|
|
|
|
This DLL exports the following two functions that allows quality resampling of true color bitmaps
|
|
(1) CreateResampledBitmap
|
|
(2) CreateUserFilterResampledBitmap
|
|
Function (1) Creates a resampled bitmap (HBITMAP) given the original one , the new dimensions
|
|
and the choosen filter (13 'default' filters are provided) (a HDC is needed too).
|
|
Functon (2) accepts a custom filter (a function pointer) and related radius to perform a similar
|
|
task.
|
|
In both cases, the new HBITMAP is returned on success (NULL on failure). When such a HBITMAP is
|
|
no longer need, call DeleteObject on it.
|
|
|
|
|
|
* AKNOWLEDGMENTS:
|
|
|
|
This work is based on the Libor Tinka's article "Image Resizing - outperform GDI+" that
|
|
may be found at CodeProject:
|
|
https://www.codeproject.com/KB/GDI-plus/imgresizoutperfgdiplus.aspx
|
|
I've ported his original algo to 100% pure unmanaged C code.
|
|
There are some modification and the resulting code (thought not optimized)
|
|
is a bit faster than the original one.
|
|
|
|
Dec. 17th 2007
|
|
*/
|
|
|
|
#include "TypeDefs.h"
|
|
|
|
/*
|
|
The following ifdef block is the standard way of creating macros which make exporting
|
|
from a DLL simpler. All files within this DLL are compiled with the RESAMPLE_EXPORTS
|
|
symbol defined on the command line. this symbol should not be defined on any project
|
|
that uses this DLL. This way any other project whose source files include this file see
|
|
RESAMPLE_API functions as being imported from a DLL, whereas this DLL sees symbols
|
|
defined with this macro as being exported.
|
|
*/
|
|
|
|
//#ifdef RESAMPLE_EXPORTS
|
|
//#define RESAMPLE_API __declspec(dllexport)
|
|
//#else
|
|
//#define RESAMPLE_API __declspec(dllimport)
|
|
//#endif
|
|
#define RESAMPLE_API
|
|
|
|
/* Stock (i.e. already defined) filters */
|
|
#define STOCK_FILTER_BELL 0x00000000
|
|
#define STOCK_FILTER_BOX 0x00000001
|
|
#define STOCK_FILTER_CATMULLROM 0x00000002
|
|
#define STOCK_FILTER_COSINE 0x00000003
|
|
#define STOCK_FILTER_CUBICCONVOLUTION 0x00000004
|
|
#define STOCK_FILTER_CUBICSPLINE 0x00000005
|
|
#define STOCK_FILTER_HERMITE 0x00000006
|
|
#define STOCK_FILTER_LANCZOS3 0x00000007
|
|
#define STOCK_FILTER_LANCZOS8 0x00000008
|
|
#define STOCK_FILTER_MITCHELL 0x00000009
|
|
#define STOCK_FILTER_QUADRATIC 0x0000000A
|
|
#define STOCK_FILTER_QUADRATICBSPLINE 0x0000000B
|
|
#define STOCK_FILTER_TRIANGLE 0x0000000C
|
|
|
|
#define STOCK_FILTERS 0x0000000D
|
|
|
|
|
|
/* Errors */
|
|
#define E_INVALID_BITMAP 0x20000001
|
|
#define E_INVALID_BITMAP_DATA 0x20000002
|
|
#define E_UNABLE_TO_LOAD_BITMAP_BITS 0x20000003
|
|
#define E_UNABLE_TO_CREATE_BITMAP 0x20000004
|
|
#define E_INVALID_OUT_BITMAP_DATA 0x20000005
|
|
#define E_MEMORY_ERROR 0x20000006
|
|
#define E_RESAMPLE_ERROR 0x20000007
|
|
#define E_UNABLE_TO_SET_BITMAP 0x20000008
|
|
#define E_UNABLE_TO_SET_FILTER 0x20000009
|
|
|
|
/* The following block allows compilation with both C++ and C code */
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
RESAMPLE_API HBITMAP CreateResampledBitmap(HDC hdc, HBITMAP hBmpSource, DWORD dwWidth, DWORD dwHeight, DWORD dwFilter);
|
|
RESAMPLE_API HBITMAP CreateUserFilterResampledBitmap(HDC hdc, HBITMAP hBmpSource, DWORD dwWidth, DWORD dwHeight, double (*CustomFilterFunc)(double), double dRadius);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|