예제 #1
0
파일: main.cpp 프로젝트: xmoeproject/X-moe
	/**
	 * 合成結果の取得。取得領域は画像全体サイズ内におさまってる必要があります
	 * @param layer 格納先レイヤ(width,heightサイズに調整される)
	 * @param left 合成結果取得領域の左上座標
	 * @param top 合成結果取得領域の左上座標
	 * @param width 取得サイズ横幅
	 * @param height 取得サイズ縦幅
	 * @return 取得に成功したら true
	 */
	bool getBlend(tTJSVariant layer, int left, int top, int width, int height) {
		if (!layer.AsObjectNoAddRef()->IsInstanceOf(0, 0, 0, L"Layer", NULL)) {
			TVPThrowExceptionMessage(L"not layer");
		}

		// 合成結果を生成
		if (psd_image_blend(context, left, top, width, height) == psd_status_done) {

			// 格納先を調整
			ncbPropAccessor obj(layer);
			obj.SetValue(L"width",  width);
			obj.SetValue(L"height", height);
			obj.SetValue(L"imageLeft",  0);
			obj.SetValue(L"imageTop",   0);
			obj.SetValue(L"imageWidth",  width);
			obj.SetValue(L"imageHeight", height);
			
			// 合成結果画像データのコピー
			psd_argb_color *src = context->blending_image_data + top * context->width + left;
			int len = width * 4;
			unsigned char *buffer = (unsigned char*)obj.GetValue(L"mainImageBufferForWrite", ncbTypedefs::Tag<tjs_int>());
			int pitch = obj.GetValue(L"mainImageBufferPitch", ncbTypedefs::Tag<tjs_int>());
			for (int y=0;y<height;y++) {
				memcpy(buffer, (unsigned char*)src, len);
				src    += context->width;
				buffer += pitch;
			}

			// 合成結果情報の破棄
			psd_image_blend_free(context);

			return true;
		}
		return false;
	}
예제 #2
0
파일: psd.c 프로젝트: jfiguinha/Regards
psd_status psd_image_free(psd_context * context)
{
	if(context == NULL)
		return psd_status_invalid_context;
	
	psd_color_mode_data_free(context);
	psd_image_resource_free(context);
	psd_layer_and_mask_free(context);
	psd_image_data_free(context);
	
	psd_image_blend_free(context);
	psd_stream_free(context);
	
	psd_free(context);

	return psd_status_done;
}
예제 #3
0
파일: psd.c 프로젝트: Sumxx/XUI
psd_status psd_image_free(psd_context * context)
{
	if(context == NULL)
		return psd_status_invalid_context;
	
	psd_color_mode_data_free(context);
	psd_image_resource_free(context);
	psd_layer_and_mask_free(context);
	psd_image_data_free(context);
	
	psd_image_blend_free(context);
	psd_stream_free(context);
	
	//psd_free(context); //[DP] the application is responsible for this

	return psd_status_done;
}