예제 #1
0
파일: tile.cpp 프로젝트: ShotaroTsuji/mona
/*!
	@brief 旗を描画する
	@param g 描画先
*/
void mine_tile::draw_flag(Graphics* g){
	static const int A = 0xFFFFFFFF;
	static const int B = 0xFF000000;
	static const int C = 0xFFFF0000;

	static const int flag_dot[16][16] = {
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,C,C,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,C,C,C,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,C,C,C,C,C,A,A,A,A},
		{A,A,A,A,A,A,A,C,C,C,C,C,A,A,A,A},
		{A,A,A,A,A,A,A,C,C,C,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,C,C,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,B,B,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,B,B,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,B,B,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,B,B,B,B,A,A,A,A,A,A},
		{A,A,A,A,A,B,B,B,B,B,B,A,A,A,A,A},
		{A,A,A,A,B,B,B,B,B,B,B,B,A,A,A,A},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
	};

	bit_blt(g, &flag_dot[0][0]);
}
예제 #2
0
파일: tile.cpp 프로젝트: ShotaroTsuji/mona
/*!
	@biref 赤色の×を描画する
	@param g 描画先
*/
void mine_tile::draw_cross(Graphics* g){
	static const int A = 0xFFFFFFFF;
	static const int B = 0xFFFF0000;

	static const int cross_dot[16][16] = {
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,A,B,A,A,A,A,A,A,A,A,A,A,B,A,A},
		{A,A,A,B,A,A,A,A,A,A,A,A,B,A,A,A},
		{A,A,A,A,B,A,A,A,A,A,A,B,A,A,A,A},
		{A,A,A,A,A,B,A,A,A,A,B,A,A,A,A,A},
		{A,A,A,A,A,A,B,A,A,B,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,B,B,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,B,B,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,B,A,A,B,A,A,A,A,A,A},
		{A,A,A,A,A,B,A,A,A,A,B,A,A,A,A,A},
		{A,A,A,A,B,A,A,A,A,A,A,B,A,A,A,A},
		{A,A,A,B,A,A,A,A,A,A,A,A,B,A,A,A},
		{A,A,B,A,A,A,A,A,A,A,A,A,A,B,A,A},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A}
	};

	bit_blt(g, &cross_dot[0][0]);
}
예제 #3
0
파일: tile.cpp 프로젝트: ShotaroTsuji/mona
/*!
	@brief タイルが押された後の、グリッドを描画する
	@param g 描画先
*/
void mine_tile::draw_grid(Graphics* g){
	static const int A = 0xFF444444;
	static const int B = 0xFF888888;

	static const int grid_dot[16][16] = {
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B},
		{A,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B}
	};

	bit_blt(g, &grid_dot[0][0]);
}
예제 #4
0
파일: tile.cpp 프로젝트: ShotaroTsuji/mona
/*!
	@brief 爆弾を描画する
	@param g 描画先
*/
void mine_tile::draw_bomb(Graphics* g){
	static const int A = 0xFFFFFFFF;
	static const int B = 0xFF000000;
	static const int C = 0xFFFF0000;
	
	static const int bomb_dot[16][16] = {
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,A,A,A,C,A,C,C,A,C,C,A,C,A,A,A},
		{A,A,A,A,A,C,A,A,C,A,A,C,A,A,A,A},
		{A,A,A,A,A,A,C,C,C,C,C,A,A,A,A,A},
		{A,A,A,A,A,A,B,B,B,B,A,A,A,A,A,A},
		{A,A,A,A,A,B,B,B,B,B,B,A,A,A,A,A},
		{A,A,A,A,B,B,B,B,B,B,B,B,A,A,A,A},
		{A,A,A,A,B,B,B,B,B,B,B,B,A,A,A,A},
		{A,A,A,A,B,B,B,B,B,B,B,B,A,A,A,A},
		{A,A,A,A,B,B,B,B,B,B,B,B,A,A,A,A},
		{A,A,A,A,A,B,B,B,B,B,B,A,A,A,A,A},
		{A,A,A,A,A,A,B,B,B,B,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A}
	};
	
	bit_blt(g, &bomb_dot[0][0]);
}
예제 #5
0
static void make_frame_planar_yuv
(
    AVPicture                 *av_picture,
    int                        width,
    int                        height,
    const component_reorder_t *component_reorder,
    VSFrameRef                *vs_frame,
    VSFrameContext            *frame_ctx,
    const VSAPI               *vsapi
)
{
    const VSFormat *vs_format = vsapi->getFrameFormat( vs_frame );
    int av_row_size_y = vs_format->bytesPerSample * width;
    for( int i = 0; i < 3; i++ )
    {
        int      vs_frame_linesize = vsapi->getStride  ( vs_frame, i );
        uint8_t *vs_frame_data     = vsapi->getWritePtr( vs_frame, i );
        int      av_plane          = component_reorder[i];
        int      av_frame_linesize = av_picture->linesize[av_plane];
        uint8_t *av_frame_data     = av_picture->data    [av_plane];
        int      av_row_size       = av_row_size_y >> (i ? vs_format->subSamplingW : 0);
        int      av_height         = height        >> (i ? vs_format->subSamplingH : 0);
        bit_blt( vs_frame_data, vs_frame_linesize,
                 av_frame_data, av_frame_linesize,
                 av_row_size,   av_height );
    }
}
예제 #6
0
static void VS_CC
write_planar(img_hnd_t *ih, int n, VSFrameRef **dst, VSCore *core,
             const VSAPI *vsapi)
{
    uint8_t *srcp = ih->image_buff;

    for (int i = 0, num = ih->src[n].format->numPlanes; i < num; i++) {
        int row_size = vsapi->getFrameWidth(dst[0], i) *
                       ih->src[n].format->bytesPerSample;
        row_size = (row_size + ih->row_adjust) & (~ih->row_adjust);
        int height = vsapi->getFrameHeight(dst[0], i);
        bit_blt(dst[0], i, vsapi, srcp, row_size, height);
        srcp += row_size * height;
    }
    
    if (ih->enable_alpha) {
        set_dummy_alpha(ih, n, dst[1], core, vsapi);
    }
}
예제 #7
0
파일: tile.cpp 프로젝트: ShotaroTsuji/mona
/*!
	@brief まだ押されていないタイルを描画する
	@param g 描画先
*/
void mine_tile::draw_frame(Graphics* g){
	static const int A = 0xFFAAAAAA;
	static const int B = 0xFF888888;
	static const int C = 0xFF444444;
	static const int frame_dot[16][16] = {
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,C},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,A,C,C},
		{A,A,A,A,A,A,A,A,A,A,A,A,A,C,C,C},
		{A,A,A,B,B,B,B,B,B,B,B,B,B,C,C,C},
		{A,A,A,B,B,B,B,B,B,B,B,B,B,C,C,C},
		{A,A,A,B,B,B,B,B,B,B,B,B,B,C,C,C},
		{A,A,A,B,B,B,B,B,B,B,B,B,B,C,C,C},
		{A,A,A,B,B,B,B,B,B,B,B,B,B,C,C,C},
		{A,A,A,B,B,B,B,B,B,B,B,B,B,C,C,C},	
		{A,A,A,B,B,B,B,B,B,B,B,B,B,C,C,C},
		{A,A,A,B,B,B,B,B,B,B,B,B,B,C,C,C},
		{A,A,A,B,B,B,B,B,B,B,B,B,B,C,C,C},
		{A,A,A,B,B,B,B,B,B,B,B,B,B,C,C,C},
		{A,A,A,C,C,C,C,C,C,C,C,C,C,C,C,C},	
		{A,A,C,C,C,C,C,C,C,C,C,C,C,C,C,C},
		{A,C,C,C,C,C,C,C,C,C,C,C,C,C,C,C}
	};
		bit_blt(g, &frame_dot[0][0]);
}
예제 #8
0
파일: tile.cpp 프로젝트: ShotaroTsuji/mona
/*!
	@brief 数字(1〜8)を描画する。
	@param g 描画先
*/
void mine_tile::draw_number(Graphics* g){
	if(value == 0){
		//数字無し
		return;
	}
	
	static const int A = 0xFFFFFFFF;
	static const int B = 0xFF0000FF;
	static const int C = 0xFF00FF00;
	static const int D = 0xFFFF0000;
	static const int E = 0xFF00CCCC;
	static const int F = 0xFFCCCC00;
	static const int G = 0xFFCC00CC;
	static const int H = 0xFF00AAAA;
	static const int I = 0xFFAA00AA;
	static const int number_dot[8][16][16] = {
		{
			/* 1 */
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,B,B,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,B,B,B,A,A,A,A,A,A},
			{A,A,A,A,A,A,B,B,B,B,A,A,A,A,A,A},
			{A,A,A,A,A,B,A,B,B,B,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,B,B,B,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,B,B,B,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,B,B,B,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,B,B,B,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,B,B,B,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,B,B,B,A,A,A,A,A,A},
			{A,A,A,A,A,B,B,B,B,B,B,B,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A}
		},
		{
			/* 2 */
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,C,C,C,C,A,A,A,A,A,A},
			{A,A,A,A,A,C,C,A,A,C,C,A,A,A,A,A},
			{A,A,A,A,A,C,C,A,A,A,C,C,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,C,C,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,C,C,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,C,C,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,C,C,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,C,C,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,C,C,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,C,C,C,C,C,C,C,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A}
		},
		{
			/* 3 */
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,D,D,D,D,D,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,D,D,D,D,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,D,D,D,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,D,D,D,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,D,D,D,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,D,D,A,A,A,A},
			{A,A,A,A,A,A,A,D,D,D,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,D,D,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,D,D,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,D,D,D,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,D,D,D,A,A,A},
			{A,A,A,A,A,A,A,A,D,D,D,D,A,A,A,A},
			{A,A,A,A,A,D,D,D,D,D,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A}
		},
		{
			/* 4 */
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,E,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,E,E,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,E,E,E,A,A,A,A,A,A,A},
			{A,A,A,A,A,E,E,E,E,A,A,A,A,A,A,A},
			{A,A,A,A,E,E,A,E,E,A,A,A,A,A,A,A},
			{A,A,A,E,E,A,A,E,E,A,A,A,A,A,A,A},
			{A,A,A,A,E,A,A,E,E,A,A,A,A,A,A,A},
			{A,A,A,A,A,E,E,E,E,E,E,E,A,A,A,A},
			{A,A,A,A,A,A,A,E,E,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,E,E,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,E,E,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,E,E,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A}
		},
		{
			/* 5 */
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,F,F,F,F,F,F,F,F,A,A,A,A},
			{A,A,A,A,F,F,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,F,F,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,F,F,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,F,F,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,F,F,F,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,F,F,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,F,F,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,F,F,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,F,F,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,F,F,A,A,A,A,A},
			{A,A,A,A,A,F,F,F,F,F,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A}
		},
		{
			/* 6 */
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,G,G,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,G,G,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,G,G,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,G,G,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,G,G,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,G,A,A,A,G,G,G,A,A,A,A,A},
			{A,A,A,A,G,A,G,G,A,A,A,G,A,A,A,A},
			{A,A,A,A,G,G,A,A,A,A,A,G,A,A,A,A},
			{A,A,A,A,G,G,A,A,A,A,A,G,A,A,A,A},
			{A,A,A,A,A,G,G,A,A,G,G,A,A,A,A,A},
			{A,A,A,A,A,A,G,G,G,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A}
		},
		{
			/* 7 */
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,H,H,H,H,H,H,H,A,A,A,A},
			{A,A,A,A,A,H,H,H,H,H,H,H,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,H,H,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,H,H,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,H,H,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,H,H,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,H,H,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,H,H,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,H,H,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,H,H,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,H,H,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,H,H,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A}
		},
		{
			/* 8 */
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,I,I,I,I,A,A,A,A,A,A},
			{A,A,A,A,I,I,A,A,A,A,I,I,A,A,A,A},
			{A,A,A,A,I,A,A,A,A,A,A,I,A,A,A,A},
			{A,A,A,A,I,A,A,A,A,A,A,I,A,A,A,A},
			{A,A,A,A,I,I,A,A,A,A,I,I,A,A,A,A},
			{A,A,A,A,A,A,I,I,I,I,A,A,A,A,A,A},
			{A,A,A,A,I,I,A,A,A,A,I,I,A,A,A,A},
			{A,A,A,A,I,A,A,A,A,A,A,I,A,A,A,A},
			{A,A,A,A,I,A,A,A,A,A,A,I,A,A,A,A},
			{A,A,A,A,I,I,A,A,A,A,I,I,A,A,A,A},
			{A,A,A,A,A,A,I,I,I,I,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A},
			{A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A}
		},
	};
	
	bit_blt(g, &number_dot[value-1][0][0]);
}
예제 #9
0
파일: xprintf.c 프로젝트: gotomypc/libvpx
/****************************************************************************
 *
 *  ROUTINE       : xprintf
 *
 *  INPUTS        : const PB_INSTANCE *ppbi : Pointer to decoder instance.
 *                  long n_pixel             : Offset into buffer to write text.
 *                  const char *format      : Format string for print.
 *                  ...                     : Variable length argument list.
 *
 *  OUTPUTS       : None.
 *
 *  RETURNS       : int: Size (in bytes) of the formatted text.
 *
 *  FUNCTION      : Display a printf style message on the current video frame.
 *
 *  SPECIAL NOTES : None.
 *
 ****************************************************************************/
int onyx_xprintf(unsigned char *ppbuffer, long n_pixel, long n_size, long n_stride, const char *format, ...)
{
    BOOL b_rc;
    va_list arglist;
    HFONT hfont, hfonto;

    int rc = 0;
    char sz_formatted[256] = "";
    unsigned char *p_dest = &ppbuffer[n_pixel];

#ifdef _WIN32_WCE
    //  Set up temporary bitmap
    HDC hdc_memory   = NULL;
    HBITMAP hbm_temp = NULL;
    HBITMAP hbm_orig = NULL;

    RECT rect;

    //  Copy bitmap to video frame
    long x;
    long y;

    //  Format text
    va_start(arglist, format);
    _vsnprintf(sz_formatted, sizeof(sz_formatted), format, arglist);
    va_end(arglist);

    rect.left   = 0;
    rect.top    = 0;
    rect.right  = 8 * strlen(sz_formatted);
    rect.bottom = 8;

    hdc_memory = create_compatible_dc(NULL);

    if (hdc_memory == NULL)
        goto Exit;

    hbm_temp = create_bitmap(rect.right, rect.bottom, 1, 1, NULL);

    if (hbm_temp == NULL)
        goto Exit;

    hbm_orig = (HBITMAP)(select_object(hdc_memory, hbm_temp));

    if (!hbm_orig)
        goto Exit;

    //  Write text into bitmap
    //  font?
    hfont = create_font(8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, VARIABLE_PITCH | FF_SWISS, "");

    if (hfont == NULL)
        goto Exit;

    hfonto = (HFONT)(select_object(hdc_memory, hbm_temp));

    if (!hfonto)
        goto Exit;

    select_object(hdc_memory, hfont);
    set_text_color(hdc_memory, 1);
    set_bk_color(hdc_memory, 0);
    set_bk_mode(hdc_memory, TRANSPARENT);

    b_rc = bit_blt(hdc_memory, rect.left, rect.top, rect.right, rect.bottom, hdc_memory, rect.left, rect.top, BLACKNESS);

    if (!b_rc)
        goto Exit;

    b_rc = ext_text_out(hdc_memory, 0, 0, ETO_CLIPPED, &rect, sz_formatted, strlen(sz_formatted), NULL);

    if (!b_rc)
        goto Exit;

    for (y = rect.top; y < rect.bottom; ++y)
    {
        for (x = rect.left; x < rect.right; ++x)
        {
            if (get_pixel(hdc_memory, x, rect.bottom - 1 - y))
                p_dest[x] = 255;
        }

        p_dest += n_stride;
    }

    rc = strlen(sz_formatted);

Exit:

    if (hbm_temp != NULL)
    {
        if (hbm_orig != NULL)
        {
            select_object(hdc_memory, hbm_orig);
        }

        delete_object(hbm_temp);
    }

    if (hfont != NULL)
    {
        if (hfonto != NULL)
            select_object(hdc_memory, hfonto);

        delete_object(hfont);
    }

    if (hdc_memory != NULL)
        delete_dc(hdc_memory);

    hdc_memory = 0;

#endif

    return rc;
}
예제 #10
0
파일: dcp.c 프로젝트: bgromov/rawstudio
static RSFilterResponse *
get_image(RSFilter *filter, const RSFilterRequest *request)
{
	RSDcp *dcp = RS_DCP(filter);
	RSDcpClass *klass = RS_DCP_GET_CLASS(dcp);
	GdkRectangle *roi;
	RSFilterResponse *previous_response;
	RSFilterResponse *response;
	RS_IMAGE16 *input;
	RS_IMAGE16 *output;
	RS_IMAGE16 *tmp;

	gint j;

	RSFilterRequest *request_clone = rs_filter_request_clone(request);

	if (!dcp->use_profile)
	{
		gfloat premul[4] = {dcp->pre_mul.x, dcp->pre_mul.y, dcp->pre_mul.z, 1.0};
		rs_filter_param_set_float4(RS_FILTER_PARAM(request_clone), "premul", premul);
	}

	rs_filter_param_set_object(RS_FILTER_PARAM(request_clone), "colorspace", klass->prophoto);
	previous_response = rs_filter_get_image(filter->previous, request_clone);
	g_object_unref(request_clone);

	if (!RS_IS_FILTER(filter->previous))
		return previous_response;

	input = rs_filter_response_get_image(previous_response);
	if (!input) return previous_response;
	response = rs_filter_response_clone(previous_response);

	/* We always deliver in ProPhoto */
	rs_filter_param_set_object(RS_FILTER_PARAM(response), "colorspace", klass->prophoto);
	g_object_unref(previous_response);

	if ((roi = rs_filter_request_get_roi(request)))
	{
		/* Align so we start at even pixel counts */
		roi->width += (roi->x&1);
		roi->x -= (roi->x&1);
		roi->width = MIN(input->w - roi->x, roi->width);
		output = rs_image16_copy(input, FALSE);
		tmp = rs_image16_new_subframe(output, roi);
		bit_blt((char*)GET_PIXEL(tmp,0,0), tmp->rowstride * 2, 
			(const char*)GET_PIXEL(input,roi->x,roi->y), input->rowstride * 2, tmp->w * tmp->pixelsize * 2, tmp->h);
	}
	else
	{
		output = rs_image16_copy(input, TRUE);
		tmp = g_object_ref(output);
	}
	g_object_unref(input);
	rs_filter_response_set_image(response, output);
	g_object_unref(output);

	g_static_rec_mutex_lock(&dcp_mutex);
	init_exposure(dcp);

	guint i, y_offset, y_per_thread, threaded_h;
	guint threads = rs_get_number_of_processor_cores();
	if (tmp->h * tmp->w < 200*200)
		threads = 1;

	ThreadInfo *t = g_new(ThreadInfo, threads);

	threaded_h = tmp->h;
	y_per_thread = (threaded_h + threads-1)/threads;
	y_offset = 0;

	for (i = 0; i < threads; i++)
	{
		t[i].tmp = tmp;
		t[i].start_y = y_offset;
		t[i].start_x = 0;
		t[i].dcp = dcp;
		y_offset += y_per_thread;
		y_offset = MIN(tmp->h, y_offset);
		t[i].end_y = y_offset;
		for(j = 0; j < 256; j++)
			t[i].curve_input_values[j] = 0;
		t[i].single_thread = (threads == 1);
		if (threads == 1)
			start_single_dcp_thread(&t[0]);
		else	
			t[i].threadid = g_thread_create(start_single_dcp_thread, &t[i], TRUE, NULL);
	}

	/* Wait for threads to finish */
	for(i = 0; threads > 1 && i < threads; i++)
		g_thread_join(t[i].threadid);

	/* Settings can change now */
	g_static_rec_mutex_unlock(&dcp_mutex);

	/* If we must deliver histogram data, do it now */
	if (dcp->read_out_curve)
	{
		gint *values = g_malloc0(256*sizeof(gint));
		for(i = 0; i < threads; i++)
			for(j = 0; j < 256; j++)
				values[j] += t[i].curve_input_values[j];
		rs_curve_set_histogram_data(RS_CURVE_WIDGET(dcp->read_out_curve), values);
		g_free(values);
	}
	g_free(t);
	g_object_unref(tmp);

	return response;
}