int iip_scan::print_all( void )
{
	double	d_x_reso,
		d_y_reso;

	if (OK != this->imageinfo_pri_all()) { return NG; }
	if (OK != this->imagelayout_pri_all()) { return NG; }
	if (OK != this->setupmemxfer_pri_all()) { return NG; }

	if (OK != this->imageinfo_get_dp_reso(&d_x_reso,&d_y_reso)) {
		return NG;
	}
	pri_funct_msg_vr( "imageinfo resolution x %.16g y %.16g",
		d_x_reso, d_y_reso );

	if (OK != this->cap_pri_brightness()) { return NG; }
	if (OK != this->cap_pri_contrast()) { return NG; }
	if (OK != this->cap_pri_gamma()) { return NG; }
	if (OK != this->cap_pri_xresolution()) { return NG; }
	if (OK != this->cap_pri_yresolution()) { return NG; }
	if (OK != this->cap_pri_indicators()) { return NG; }
	if (OK != this->cap_pri_units()) { return NG; }
	if (OK != this->cap_pri_xfermech()) { return NG; }
	if (OK != this->cap_pri_pixeltype()) { return NG; }
	if (OK != this->cap_pri_bitdepth()) { return NG; }
	if (OK != this->cap_pri_orientation()) { return NG; }
	if (OK != this->cap_pri_threshold()) { return NG; }

	/* TWAINスキャナーから読み取った情報 */
	pri_funct_msg_vr( "native_resolution x %.16g y %.16g",
		this->_d_x_native_resolution,
		this->_d_y_native_resolution );
	pri_funct_msg_vr( "physical_area     x %.16g y %.16g",
		this->_d_physical_width,
		this->_d_physical_height );
	pri_funct_msg_vr( "uicontrollable_sw %ld",
		this->_l_uicontrollable_sw );

	return OK;
}
void tw_win_l2_dss::_imageinfo_pri( TW_IMAGEINFO *p_tw_imageinfo )
{
	TW_FIX32	*p_tw_fix32;
	double	d_val;

	pri_funct_msg_vr(
	"------ TW_IMAGEINFO ------" );

	pri_funct_msg_vr(
	"01/12 type      parameter        value : description");

	p_tw_fix32 = &(p_tw_imageinfo->XResolution);
	this->_fix32_to_double( p_tw_fix32, &d_val );

	pri_funct_msg_vr(
	"02/12 TW_FIX32  XResolution      %lf : (While %d,Frac %d)",
		d_val, p_tw_fix32->Whole, p_tw_fix32->Frac );

	p_tw_fix32 = &(p_tw_imageinfo->YResolution);
	this->_fix32_to_double( p_tw_fix32, &d_val );

	pri_funct_msg_vr(
	"03/12 TW_FIX32  YResolution      %lf : (While %d,Frac %d)",
		d_val, p_tw_fix32->Whole, p_tw_fix32->Frac );

	pri_funct_msg_vr(
	"04/12 TW_INT32  ImageWidth       %d",
		p_tw_imageinfo->ImageWidth );
	pri_funct_msg_vr(
	"05/12 TW_INT32  ImageLength      %d : height",
		p_tw_imageinfo->ImageLength );
	pri_funct_msg_vr(
	"06/12 TW_INT16  SamplesPerPixel  %d",
		p_tw_imageinfo->SamplesPerPixel );
	pri_funct_msg_vr(
	"07/12 TW_INT16  BitsPerSample[8] %d %d %d %d %d %d %d %d",
		p_tw_imageinfo->BitsPerSample[0],
		p_tw_imageinfo->BitsPerSample[1],
		p_tw_imageinfo->BitsPerSample[2],
		p_tw_imageinfo->BitsPerSample[3],
		p_tw_imageinfo->BitsPerSample[4],
		p_tw_imageinfo->BitsPerSample[5],
		p_tw_imageinfo->BitsPerSample[6],
		p_tw_imageinfo->BitsPerSample[7]
	);
	pri_funct_msg_vr(
	"08/12         : Number of bits for each sample" );
	pri_funct_msg_vr(
	"09/12 TW_INT16  BitsPerPixel     %d",
		p_tw_imageinfo->BitsPerPixel );
	pri_funct_msg_vr(
	"10/12 TW_BOOL   Planar           %d : TRUE is Planar,FALSE is chunky",
		p_tw_imageinfo->Planar );
	pri_funct_msg_vr(
	"11/12 TW_INT16  PixelType        %d : TWPT_XXXX",
		p_tw_imageinfo->PixelType );
	pri_funct_msg_vr(
	"12/12 TW_UINT16 Compression      %d : TWCP_XXXX",
		p_tw_imageinfo->Compression );
}
int iip_opengl_l2data::set_imagedata( iip_canvas *clp_parent )
{
	if (ON == this->get_i_mv_sw()) {
	 pri_funct_msg_vr( "iip_opengl_l2data::set_imagedata(-)" );
	}

	/*
	 * 親子接続し、関係を設定する
	 */

	/*  clp_parent - 元画像
	    +-- cl_iip_prec 精度変換
		+-- cl_iip_chan RGB(A)チャンネル表示専用
		+-- cl_iip_view OpenGL画像表示機能
	*/
	this->cl_iip_prec.set_clp_parent( clp_parent );
	this->cl_iip_chan.set_clp_parent(
		&(this->cl_iip_prec) );
	this->cl_iip_view.set_clp_parent(
		&(this->cl_iip_prec) );

	/*
	 * 親から子へ画像の大きさをセット
	 */

	this->cl_iip_prec.set_canvas_size( clp_parent );

	/* 以下の精度の場合は、表示用の精度に変更する */
	switch(this->cl_iip_prec.cl_ch_info.get_e_ch_num_type()){
	case E_CH_NUM_USHRT:
	case E_CH_NUM_ULONG:
	case E_CH_NUM_DOUBL:
		this->cl_iip_prec.cl_ch_info.set_e_ch_num_type(
			E_CH_NUM_UCHAR);
		break;
	case E_CH_NUM_BITBW:
		if (ON == this->_i_bw_use_uchar_sw) {
			this->cl_iip_prec.cl_ch_info.set_e_ch_num_type(
				E_CH_NUM_UCHAR);
		}
		break;
	case E_CH_NUM_EMPTY:
	case E_CH_NUM_UCHAR:
	default:
		break;
	}

	this->cl_iip_chan.set_canvas_size(
		&(this->cl_iip_prec) );
	this->cl_iip_view.set_canvas_size(
		&(this->cl_iip_prec) );

	/* 切抜きエリアを(画像の大きさに)初期設定 */
	this->cl_iip_view.set_crop_full_image();

	/*
	 * 画像カンバスの準備(メモリ確保あるいは参照)
	 */

	if (OK != this->cl_iip_prec.set_canvas()) {
		pri_funct_err_bttvr(
	 "Error : this->cl_iip_prec.set_canvas() returns NG" );
		return NG;
        }
	/* RGB(A)のときだけ、channel毎表示用メモリが必要 */
	if (3L <= this->cl_iip_chan.get_l_channels()) {
	 /* channel毎表示メモリを確保 */
	 if (OK != this->cl_iip_chan.mem_alloc_canvas()) {
		pri_funct_err_bttvr(
	  "Error : this->cl_iip_chan.mem_alloc_canvas() returns NG" );
		return NG;
         }
	 /* channel毎のメモリを表示classへ登録する */
	 this->cl_iip_view.set_ucp_rrggbbaa(
	  (unsigned char *)(this->cl_iip_chan.get_vp_canvas())
	 );
	}

	/*
	this->cl_iip_viewは
	this->cl_iip_prec(親)を参照するのみ
	*/
	this->cl_iip_view.set_vp_reference_canvas(
		this->cl_iip_prec.get_vp_canvas()
	);

	/*
	 * 画像を作成、あるいは参照
	 */

	this->cl_iip_prec.exec();

	/* RGB(A)のときだけ、channel毎の画像を作成 */
	if (3L <= this->cl_iip_chan.get_l_channels()) {
	 this->_from_uchar_rgbargba_to_rrggbbaa(
		(unsigned char *)
		this->cl_iip_prec.get_vp_canvas(),

		this->cl_iip_prec.get_l_width(),
		this->cl_iip_prec.get_l_height(),
		this->cl_iip_prec.get_l_channels(),

		(unsigned char *)
		this->cl_iip_chan.get_vp_canvas()
	 );
	}

	return OK;
}