FLTK 를 쓰면서 항상 불편 한 점은 여러 있을 수 있겠습니다만, 기본적으로 이미지 처리를 하는 기능이 너무 빈약 하다 보니, 이런 점들을 하나 둘씩 만들어 쓰다가 결국 이번에 하나로 뭉치기로 하였습니다.
아직까진 개발중인 부분이 많다 보니 어디에 올리진 않고 있습니다만, 곧 정리가 더 되는데로 GitHub 나 BitBucket 에 올리는 것을 목적으로 할 예정 입니다.
기본적으로 현재 여러 기능들이 지원 되며, 그 항목은 다음과 같습니다.
- Fl_RGB_Image 를 이용한 다양한 처리 ( Fl_JPEG_Image 나 Fl_PNG_Image 의 color depth 3 이상이면 사용 가능 )
- 이미지 고속 회전 90도, 180도, 270도
- 이미지 자유 회전 0~359 도 (alias 처리는 하지 않음)
- 밝기, 콘트라스트, 감마 조절
- 샤픈,블루어 필터 (kernal matrix filter 구현 사용)
- 사용자가 만들어 쓰는 필터 기능
- Fl_Widget 을 Fl_RGB_Image 로 그려서 받아 낼 수 있는 기능
추가된 기능은 다음과 같습니다.
- Tone mapping (HDR) 지원: Drago 및 Reinhard 알고리즘 이용.
- 이미지 여러장 겹치기 ( 다중 노출 )
- 이미지 특정 위치 잘라 내기
- 이미지에 다른 이미지 붙이기
위 기능중 구현이 끝난 것들에 대해서는 아래 첨부 파일로 demo 를 돌려 볼 수 있습니다.
Windows 64bit 이상에서만 구동 됩니다.
또한 현재 구현된 헤더는 다음과 같으나, 곧 Open Source 로 올리면서 블로그 글에서는 헤더 내용을 지우도록 하겠습니다.
#ifndef __FL_IMGTOOLKIT_H__
#define __FL_IMGTOOLKIT_H__
⁄*******************************************************************************
* fl_imgtk.H , version 2017-03-24-0
* =============================================================================
* A tool kit for basic FLTK image processing.
* (C) 2016-2017 Raphael Kim, Raph.K. ( rageworx or rage.kim @gmail.com )
* All rights reserved for MIT license.
*******************************************************************************⁄
#include <FL⁄Fl.H>
#include <FL⁄Fl_Image.H>
#include <FL⁄Fl_RGB_Image.H>
namespace fl_imgtk
{
typedef struct
{
uchar w; ⁄⁄⁄ Width
uchar h; ⁄⁄⁄ Height
float f; ⁄⁄⁄ Factor
float b; ⁄⁄⁄ Bias
uchar msz; ⁄⁄⁄ Matrix size
float* m; ⁄⁄⁄ Matrix array (dynamical allocation)
}kfconfig; ⁄⁄⁄ Kernel Filter Configuration.
⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄
Fl_RGB_Image* flip_horizontal( Fl_RGB_Image* img );
Fl_RGB_Image* flip_vertical( Fl_RGB_Image* img );
Fl_RGB_Image* rotate90( Fl_RGB_Image* img );
Fl_RGB_Image* rotate180( Fl_RGB_Image* img );
Fl_RGB_Image* rotate270( Fl_RGB_Image* img );
Fl_RGB_Image* rotatefree( Fl_RGB_Image* img, float deg );
⁄***
* these following methods: Gamma, Brightness, Contrast
* are motivated from FreeImageToolkit open source.
* -- http:⁄⁄freeimage.sourceforge.net⁄
* ,by Following FreeImage License.
*
* reprogrammed by Raph.K. (rageworx@gmail.com).
***⁄
⁄⁄ Gamma default = 1.0
Fl_RGB_Image* gamma( Fl_RGB_Image* img, double gamma );
⁄⁄ perc => -100 ~ 100
Fl_RGB_Image* brightness( Fl_RGB_Image* img, double perc );
⁄⁄ perc => -100 ~ 100
Fl_RGB_Image* contrast( Fl_RGB_Image* img, double perc );
Fl_RGB_Image* filtered( Fl_RGB_Image* img, kfconfig* kfc );
⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄
Fl_RGB_Image* draw_widget_to_image( Fl_Widget* w );
⁄***
* preset configs : blur, blurmore, sharpen, sharpenmore
* null = empty one.
****⁄
kfconfig* new_kfconfig( const char* preset );
⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄
void discard_user_rgb_image( Fl_RGB_Image* &img );
void discard_kfconfig( kfconfig* &kfc ); ⁄⁄⁄ Not Kentucky Fried Chicken !
};
#endif ⁄⁄⁄ of __FL_IMGTOOLKIT_H__
FLTK 를 쓰시는 분들이 이쁜 GUI 를 만드는데 어느정도 기여가 되면 좋겠습니다.