本文整理汇总了C#中INyARRgbRaster类的典型用法代码示例。如果您正苦于以下问题:C# INyARRgbRaster类的具体用法?C# INyARRgbRaster怎么用?C# INyARRgbRaster使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
INyARRgbRaster类属于命名空间,在下文中一共展示了INyARRgbRaster类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: copyPatt
public bool copyPatt(double i_x1, double i_y1, double i_x2, double i_y2, double i_x3, double i_y3, double i_x4, double i_y4, int i_edge_x, int i_edge_y, int i_resolution, INyARRgbRaster i_out)
{
NyARIntSize out_size = i_out.getSize();
int xe = out_size.w * i_edge_x / 50;
int ye = out_size.h * i_edge_y / 50;
//サンプリング解像度で分岐
if (i_resolution == 1)
{
if (!this._perspective_gen.getParam((xe * 2 + out_size.w), (ye * 2 + out_size.h), i_x1, i_y1, i_x2, i_y2, i_x3, i_y3, i_x4, i_y4, this.__pickFromRaster_cpara))
{
return false;
}
this.onePixel(xe + LOCAL_LT, ye + LOCAL_LT, this.__pickFromRaster_cpara, i_out);
}
else
{
if (!this._perspective_gen.getParam((xe * 2 + out_size.w) * i_resolution, (ye * 2 + out_size.h) * i_resolution, i_x1, i_y1, i_x2, i_y2, i_x3, i_y3, i_x4, i_y4, this.__pickFromRaster_cpara))
{
return false;
}
this.multiPixel(xe * i_resolution + LOCAL_LT, ye * i_resolution + LOCAL_LT, this.__pickFromRaster_cpara, i_resolution, i_out);
}
return true;
}
开发者ID:walidBelfadel,项目名称:MARS_project,代码行数:25,代码来源:NyARPerspectiveCopy_Base.cs
示例2: doFilter
public void doFilter(INyARRgbRaster i_input, NyARBinRaster i_output)
{
Debug.Assert(i_input.getSize().isEqualSize(i_output.getSize()) == true);
this._do_threshold_impl.doThFilter(i_input, i_output, i_output.getSize());
return;
}
开发者ID:amoldeshpande,项目名称:slartoolkit,代码行数:7,代码来源:NyARRasterFilter_AdaptiveThreshold.cs
示例3: createDriver
/**
* この関数は、i_rasterを操作するピクセルドライバインスタンスを生成します。
* @param i_raster
* @return
* @
*/
public static INyARRgbPixelDriver createDriver(INyARRgbRaster i_raster)
{
INyARRgbPixelDriver ret;
switch (i_raster.getBufferType())
{
case NyARBufferType.BYTE1D_B8G8R8_24:
ret = new NyARRgbPixelDriver_BYTE1D_B8G8R8_24();
break;
case NyARBufferType.BYTE1D_B8G8R8X8_32:
ret = new NyARRgbPixelDriver_BYTE1D_B8G8R8X8_32();
break;
case NyARBufferType.BYTE1D_R8G8B8_24:
ret = new NyARRgbPixelDriver_BYTE1D_R8G8B8_24();
break;
case NyARBufferType.BYTE1D_X8R8G8B8_32:
ret = new NyARRgbPixelDriver_BYTE1D_X8R8G8B8_32();
break;
case NyARBufferType.INT1D_GRAY_8:
ret = new NyARRgbPixelDriver_INT1D_GRAY_8();
break;
case NyARBufferType.INT1D_X8R8G8B8_32:
ret = new NyARRgbPixelDriver_INT1D_X8R8G8B8_32();
break;
case NyARBufferType.BYTE1D_R5G6B5_16BE:
ret = new NyARRgbPixelDriver_WORD1D_R5G6B5_16LE();
break;
default:
throw new NyARException();
}
ret.switchRaster(i_raster);
return ret;
}
开发者ID:ooHIROoo,项目名称:Imagine2016,代码行数:38,代码来源:NyARRgbPixelDriverFactory.cs
示例4: NyARRgb2GsFilterArtkTh_BYTE1D_C8C8C8_24
public NyARRgb2GsFilterArtkTh_BYTE1D_C8C8C8_24(INyARRgbRaster i_raster)
{
Debug.Assert(
i_raster.isEqualBufferType(NyARBufferType.BYTE1D_B8G8R8_24) ||
i_raster.isEqualBufferType(NyARBufferType.BYTE1D_R8G8B8_24));
this._raster = i_raster;
}
开发者ID:mlakhal,项目名称:CollaborativeAugmentedRealityEnvironment,代码行数:7,代码来源:INyARRgb2GsFilterArtkTh.cs
示例5: doFilter
public void doFilter(INyARRgbRaster i_input, NyARBinRaster i_output)
{
//INyARBufferReader in_buffer_reader = i_input.getBufferReader();
//INyARBufferReader out_buffer_reader = i_output.getBufferReader();
int in_buf_type = i_input.getBufferType();
NyARIntSize size = i_output.getSize();
Debug.Assert(i_output.isEqualBufferType(NyARBufferType.INT2D_BIN_8));
Debug.Assert(checkInputType(in_buf_type) == true);
Debug.Assert(i_input.getSize().isEqualSize(size.w * 2, size.h * 2) == true);
int[][] out_buf = (int[][])i_output.getBuffer();
switch (i_input.getBufferType())
{
case NyARBufferType.BYTE1D_B8G8R8_24:
case NyARBufferType.BYTE1D_R8G8B8_24:
convert24BitRgb((byte[])i_input.getBuffer(), out_buf, size);
break;
case NyARBufferType.BYTE1D_B8G8R8X8_32:
convert32BitRgbx((byte[])i_input.getBuffer(), out_buf, size);
break;
case NyARBufferType.WORD1D_R5G6B5_16LE:
convert16BitRgb565word((short[])i_input.getBuffer(), out_buf, size);
break;
default:
throw new NyARException();
}
return;
}
开发者ID:whztt07,项目名称:NyARToolkitCS,代码行数:31,代码来源:NyARRasterFilter_ARTTh_Quad.cs
示例6: pickFromRaster
/**
* この関数は、ラスタのi_vertexsで定義される四角形からパターンを取得して、インスタンスに格納します。
*/
public override bool pickFromRaster(INyARRgbRaster image, NyARIntPoint2d[] i_vertexs)
{
NyARMat cpara = this.wk_pickFromRaster_cpara;
// xdiv2,ydiv2の計算
int xdiv2, ydiv2;
int l1, l2;
int w1, w2;
// x計算
w1 = i_vertexs[0].x - i_vertexs[1].x;
w2 = i_vertexs[0].y - i_vertexs[1].y;
l1 = (w1 * w1 + w2 * w2);
w1 = i_vertexs[2].x - i_vertexs[3].x;
w2 = i_vertexs[2].y - i_vertexs[3].y;
l2 = (w1 * w1 + w2 * w2);
if (l2 > l1)
{
l1 = l2;
}
l1 = l1 / 4;
xdiv2 = this._size.w;
while (xdiv2 * xdiv2 < l1)
{
xdiv2 *= 2;
}
if (xdiv2 > AR_PATT_SAMPLE_NUM)
{
xdiv2 = AR_PATT_SAMPLE_NUM;
}
// y計算
w1 = i_vertexs[1].x - i_vertexs[2].x;
w2 = i_vertexs[1].y - i_vertexs[2].y;
l1 = (w1 * w1 + w2 * w2);
w1 = i_vertexs[3].x - i_vertexs[0].x;
w2 = i_vertexs[3].y - i_vertexs[0].y;
l2 = (w1 * w1 + w2 * w2);
if (l2 > l1)
{
l1 = l2;
}
ydiv2 = this._size.h;
l1 = l1 / 4;
while (ydiv2 * ydiv2 < l1)
{
ydiv2 *= 2;
}
if (ydiv2 > AR_PATT_SAMPLE_NUM)
{
ydiv2 = AR_PATT_SAMPLE_NUM;
}
// cparaの計算
if (!get_cpara(i_vertexs, cpara))
{
return false;
}
updateExtpat(image, cpara, xdiv2, ydiv2);
return true;
}
开发者ID:walidBelfadel,项目名称:MARS_project,代码行数:63,代码来源:NyARColorPatt_O3.cs
示例7: createYCbCrDriver
/**
* この関数は(Yrcb)でグレースケール化するフィルタを生成します。
* 最適化されていません。
* @param i_raster
* @return
* @
*/
public static INyARRgb2GsFilterYCbCr createYCbCrDriver(INyARRgbRaster i_raster)
{
switch (i_raster.getBufferType())
{
default:
return new NyARRgb2GsFilterYCbCr_Any(i_raster);
}
}
开发者ID:mlakhal,项目名称:CollaborativeAugmentedRealityEnvironment,代码行数:15,代码来源:NyARRgb2GsFilterFactory.cs
示例8: createRgbCubeDriver
/**
* この関数は、(R*G*B>>16) でグレースケール化するフィルタを生成します。
* 最適化されていません。
* @param i_raster
* @return
* @
*/
public static INyARRgb2GsFilterRgbAve createRgbCubeDriver(INyARRgbRaster i_raster)
{
switch (i_raster.getBufferType())
{
default:
return new NyARRgb2GsFilterRgbCube_Any(i_raster);
}
}
开发者ID:mlakhal,项目名称:CollaborativeAugmentedRealityEnvironment,代码行数:15,代码来源:NyARRgb2GsFilterFactory.cs
示例9: update
/// <summary>
/// This function is dissabled.
/// See "void update(Texture2D i_input)"
/// </summary>
/// <param name='i_input'>
/// undefined.
/// </param>
public override void update(INyARRgbRaster i_input)
{
//Must be same instance as internal raster.
if(i_input!=this._raster){
throw new NyARException();
}
base.update(i_input);
}
开发者ID:Carteor,项目名称:LensesAR-Unity3D,代码行数:15,代码来源:NyARUnitySensor.cs
示例10: createInstance
public static INyARHistogramFromRaster createInstance(INyARRgbRaster i_raster)
{
if (i_raster is INyARRgbRaster)
{
return new NyARHistogramFromRaster_AnyRgb((INyARRgbRaster)i_raster);
}
throw new NyARException();
}
开发者ID:whztt07,项目名称:NyARToolkitCS,代码行数:8,代码来源:NyARHistogramFromRasterFactory.cs
示例11: pickupImage2d
/**
* This function retrieves bitmap from the area defined by RECT(i_l,i_t,i_r,i_b) above transform matrix i_base_mat.
* ----
* この関数は、basementで示される平面のAで定義される領域から、ビットマップを読み出します。
* 例えば、8cmマーカでRECT(i_l,i_t,i_r,i_b)に-40,0,0,-40.0を指定すると、マーカの左下部分の画像を抽出します。
*
* マーカから離れた場所になるほど、また、マーカの鉛直方向から外れるほど誤差が大きくなります。
* @param i_src_imege
* 詠み出し元の画像を指定します。
* @param i_l
* 基準点からの左上の相対座標(x)を指定します。
* @param i_t
* 基準点からの左上の相対座標(y)を指定します。
* @param i_r
* 基準点からの右下の相対座標(x)を指定します。
* @param i_b
* 基準点からの右下の相対座標(y)を指定します。
* @param i_base_mat
* @return 画像の取得の成否を返す。
*/
public bool pickupImage2d(INyARRgbRaster i_src_imege, double i_l, double i_t, double i_r, double i_b, NyARTransMatResult i_base_mat)
{
double cp00, cp01, cp02, cp11, cp12;
cp00 = this._ref_perspective.m00;
cp01 = this._ref_perspective.m01;
cp02 = this._ref_perspective.m02;
cp11 = this._ref_perspective.m11;
cp12 = this._ref_perspective.m12;
//マーカと同一平面上にある矩形の4個の頂点を座標変換して、射影変換して画面上の
//頂点を計算する。
//[hX,hY,h]=[P][RT][x,y,z]
//出力先
NyARIntPoint2d[] poinsts = this._work_points;
double yt0, yt1, yt2;
double x3, y3, z3;
double m00 = i_base_mat.m00;
double m10 = i_base_mat.m10;
double m20 = i_base_mat.m20;
//yとtの要素を先に計算
yt0 = i_base_mat.m01 * i_t + i_base_mat.m03;
yt1 = i_base_mat.m11 * i_t + i_base_mat.m13;
yt2 = i_base_mat.m21 * i_t + i_base_mat.m23;
// l,t
x3 = m00 * i_l + yt0;
y3 = m10 * i_l + yt1;
z3 = m20 * i_l + yt2;
poinsts[0].x = (int)((x3 * cp00 + y3 * cp01 + z3 * cp02) / z3);
poinsts[0].y = (int)((y3 * cp11 + z3 * cp12) / z3);
// r,t
x3 = m00 * i_r + yt0;
y3 = m10 * i_r + yt1;
z3 = m20 * i_r + yt2;
poinsts[1].x = (int)((x3 * cp00 + y3 * cp01 + z3 * cp02) / z3);
poinsts[1].y = (int)((y3 * cp11 + z3 * cp12) / z3);
//yとtの要素を先に計算
yt0 = i_base_mat.m01 * i_b + i_base_mat.m03;
yt1 = i_base_mat.m11 * i_b + i_base_mat.m13;
yt2 = i_base_mat.m21 * i_b + i_base_mat.m23;
// r,b
x3 = m00 * i_r + yt0;
y3 = m10 * i_r + yt1;
z3 = m20 * i_r + yt2;
poinsts[2].x = (int)((x3 * cp00 + y3 * cp01 + z3 * cp02) / z3);
poinsts[2].y = (int)((y3 * cp11 + z3 * cp12) / z3);
// l,b
x3 = m00 * i_l + yt0;
y3 = m10 * i_l + yt1;
z3 = m20 * i_l + yt2;
poinsts[3].x = (int)((x3 * cp00 + y3 * cp01 + z3 * cp02) / z3);
poinsts[3].y = (int)((y3 * cp11 + z3 * cp12) / z3);
return this.pickFromRaster(i_src_imege, poinsts);
}
开发者ID:flair2005,项目名称:CameraPositioner,代码行数:78,代码来源:TransformedBitmapPickup.cs
示例12: doFilter
/**
* 入力ラスタをHSV形式に変換して、出力ラスタへ書込みます。
* 画素形式は、コンストラクタに指定した形式に合せてください。
*/
public void doFilter(INyARRgbRaster i_input, INyARRaster i_output)
{
Debug.Assert(i_input.getSize().isEqualSize(i_output.getSize()) == true);
if (!this._do_filter_impl.isSupport(i_input, i_output))
{
this._do_filter_impl = this.createFilter(i_input, i_output);
}
this._do_filter_impl.doFilter(i_input, i_output, i_input.getSize());
}
开发者ID:mlakhal,项目名称:CollaborativeAugmentedRealityEnvironment,代码行数:13,代码来源:NyARRasterFilter_Rgb2Hsv.cs
示例13: createDriver
public static IRasterDriver createDriver(INyARRgbRaster i_raster)
{
switch (i_raster.getBufferType())
{
case NyARBufferType.INT1D_X8R8G8B8_32:
return new NyARMatchPattDeviationDataDriver_INT1D_X8R8G8B8_32(i_raster);
default:
break;
}
return new NyARMatchPattDeviationDataDriver_RGBAny(i_raster);
}
开发者ID:whztt07,项目名称:NyARToolkitCS,代码行数:11,代码来源:NyARMatchPattDeviationColorData.cs
示例14: setRaster
/* DsXRGB32Rasterの内容を保持しているサーフェイスにコピーします。
*/
public void setRaster(INyARRgbRaster i_sample)
{
Debug.Assert(!this._is_dispose);
int pitch;
int s_stride = this.m_width * 4;
using (GraphicsStream gs = this._surface.LockRectangle(LockFlags.None, out pitch))
{
try{
switch (i_sample.getBufferType())
{
case NyARBufferType.BYTE1D_B8G8R8X8_32:
if (pitch % s_stride == 0)
{
Marshal.Copy((byte[])i_sample.getBuffer(), 0, (IntPtr)((int)gs.InternalData), this.m_width * 4 * this.m_height);
}
else
{
int s_idx = 0;
int d_idx = (int)gs.InternalData;
for (int i = this.m_height - 1; i >= 0; i--)
{
//どう考えてもポインタです。
Marshal.Copy((byte[])i_sample.getBuffer(), s_idx, (IntPtr)(d_idx), s_stride);
s_idx += s_stride;
d_idx += pitch;
}
}
break;
case NyARBufferType.OBJECT_CS_Bitmap:
NyARBitmapRaster ra = (NyARBitmapRaster)(i_sample);
BitmapData bm = ra.lockBitmap();
try{
//コピー
int src = (int)bm.Scan0;
int dst = (int)gs.InternalData;
for (int r = this.m_height - 1; r >= 0; r--)
{
NyARD3dUtil.RtlCopyMemory((IntPtr)dst, (IntPtr)src, s_stride);
dst += pitch;
src += bm.Stride;
}
}finally{
ra.unlockBitmap();
}
break;
default:
throw new NyARException();
}
}finally{
this._surface.UnlockRectangle();
}
return;
}
}
开发者ID:whztt07,项目名称:NyARToolkitCS,代码行数:56,代码来源:NyARD3dSurface.cs
示例15: createRgbAveDriver
/**
* この関数は、(R*G*B)/3 でグレースケール化するフィルタを生成します。
* 最適化されている形式は以下の通りです。
* <ul>
* <li>{@link NyARBufferType#BYTE1D_B8G8R8X8_32}</li>
* </ul>
* @param i_raster
* @return
* @
*/
public static INyARRgb2GsFilterRgbAve createRgbAveDriver(INyARRgbRaster i_raster)
{
switch (i_raster.getBufferType())
{
case NyARBufferType.BYTE1D_B8G8R8X8_32:
return new NyARRgb2GsFilterRgbAve_BYTE1D_B8G8R8X8_32(i_raster);
case NyARBufferType.BYTE1D_B8G8R8_24:
return new NyARRgb2GsFilterRgbAve_BYTE1D_C8C8C8_24(i_raster);
case NyARBufferType.BYTE1D_X8R8G8B8_32:
return new NyARRgb2GsFilterRgbAve_INT1D_X8R8G8B8_32(i_raster);
default:
return new NyARRgb2GsFilterRgbAve_Any(i_raster);
}
}
开发者ID:mlakhal,项目名称:CollaborativeAugmentedRealityEnvironment,代码行数:24,代码来源:NyARRgb2GsFilterFactory.cs
示例16: drawBackground
/// <summary>
/// バックグラウンドにラスタを描画します。
/// </summary>
/// <param name="i_gl"></param>
/// <param name="i_bg_image"></param>
public void drawBackground(Device i_dev, INyARRgbRaster i_bg_image)
{
NyARIntSize s = i_bg_image.getSize();
if(this._surface==null){
this._surface = new NyARD3dSurface(i_dev,s.w,s.h);
}else if(!this._surface.isEqualSize(i_bg_image.getSize())){
//サーフェイスの再構築
this._surface.Dispose();
this._surface = new NyARD3dSurface(i_dev, this._screen_size.w, this._screen_size.h);
}
this._surface.setRaster(i_bg_image);
Surface dest_surface = i_dev.GetBackBuffer(0, 0, BackBufferType.Mono);
Rectangle rect = new Rectangle(0, 0, this._screen_size.w, this._screen_size.h);
i_dev.StretchRectangle((Surface)this._surface, rect, dest_surface, rect, TextureFilter.None);
}
开发者ID:whztt07,项目名称:NyARToolkitCS,代码行数:20,代码来源:NyARD3dRender.cs
示例17: createDriver
/**
* 指定したIN/OUTに最適な{@link INyARPerspectiveReaader}を生成します。
* <p>入力ラスタについて
* 基本的には全ての{@link INyARRgbRaster}を実装したクラスを処理できますが、次の3種類のバッファを持つものを推奨します。
* <ul>
* <li>{@link NyARBufferType#BYTE1D_B8G8R8X8_32}
* <li>{@link NyARBufferType#BYTE1D_B8G8R8_24}
* <li>{@link NyARBufferType#BYTE1D_R8G8B8_24}
* </ul>
* </p>
* <p>出力ラスタについて
* 基本的には全ての{@link NyARBufferType#INT1D_X8R8G8B8_32}形式のバッファを持つラスタを使用してください。
* 他の形式でも動作しますが、低速な場合があります。
* </p>
* <p>高速化について -
* 入力ラスタ形式が、{@link NyARBufferType#BYTE1D_B8G8R8X8_32},{@link NyARBufferType#BYTE1D_B8G8R8_24}
* ,{@link NyARBufferType#BYTE1D_R8G8B8_24}のものについては、他の形式よりも高速に動作します。
* また、出力ラスタ形式が、{@link NyARBufferType#INT1D_X8R8G8B8_32}の物については、単体サンプリングモードの時のみ、さらに高速に動作します。
* 他の形式のラスタでは、以上のものよりも低速転送で対応します。
* @param i_in_raster_type
* 入力ラスタの形式です。
* @param i_out_raster_type
* 出力ラスタの形式です。
* @return
*/
public static INyARPerspectiveCopy createDriver(INyARRgbRaster i_raster)
{
//新しいモードに対応したら書いてね。
switch (i_raster.getBufferType())
{
case NyARBufferType.BYTE1D_B8G8R8X8_32:
return new PerspectiveCopy_BYTE1D_B8G8R8X8_32(i_raster);
case NyARBufferType.BYTE1D_B8G8R8_24:
return new PerspectiveCopy_BYTE1D_B8G8R8_24(i_raster);
case NyARBufferType.BYTE1D_R8G8B8_24:
return new PerspectiveCopy_BYTE1D_R8G8B8_24(i_raster);
default:
return new PerspectiveCopy_ANYRgb(i_raster);
}
}
开发者ID:ooHIROoo,项目名称:Imagine2016,代码行数:40,代码来源:NyARPerspectiveCopyFactory.cs
示例18: copy
/**
* ラスタのコピーを実行します。
* この関数は暫定です。低速なので注意してください。
* @param i_input
* @param o_output
* @
*/
public static void copy(INyARRgbRaster i_input, INyARRgbRaster o_output)
{
Debug.Assert(i_input.getSize().isEqualSize(o_output.getSize()));
int width = i_input.getWidth();
int height = i_input.getHeight();
int[] rgb = new int[3];
INyARRgbPixelDriver inr = i_input.getRgbPixelDriver();
INyARRgbPixelDriver outr = o_output.getRgbPixelDriver();
for (int i = height - 1; i >= 0; i--)
{
for (int i2 = width - 1; i2 >= 0; i2--)
{
inr.getPixel(i2, i, rgb);
outr.setPixel(i2, i, rgb);
}
}
}
开发者ID:walidBelfadel,项目名称:MARS_project,代码行数:24,代码来源:NyARRgbRaster_BasicClass.cs
示例19: createDriver
public static INyARRgb2GsFilterArtkTh createDriver(INyARRgbRaster i_raster)
{
switch (i_raster.getBufferType())
{
case NyARBufferType.BYTE1D_B8G8R8_24:
case NyARBufferType.BYTE1D_R8G8B8_24:
return new NyARRgb2GsFilterArtkTh_BYTE1D_C8C8C8_24(i_raster);
case NyARBufferType.BYTE1D_B8G8R8X8_32:
return new NyARRgb2GsFilterArtkTh_BYTE1D_B8G8R8X8_32(i_raster);
case NyARBufferType.BYTE1D_X8R8G8B8_32:
return new NyARRgb2GsFilterArtkTh_BYTE1D_X8R8G8B8_32(i_raster);
case NyARBufferType.INT1D_X8R8G8B8_32:
return new NyARRgb2GsFilterArtkTh_INT1D_X8R8G8B8_32(i_raster);
case NyARBufferType.WORD1D_R5G6B5_16LE:
return new NyARRgb2GsFilterArtkTh_WORD1D_R5G6B5_16LE(i_raster);
default:
return new NyARRgb2GsFilterArtkTh_Any(i_raster);
}
}
开发者ID:Carteor,项目名称:LensesAR-Unity3D,代码行数:19,代码来源:NyARRgb2GsFilterArtkThFactory.cs
示例20: switchRaster
public void switchRaster(INyARRgbRaster i_raster)
{
this._ref_raster = (NyARBitmapRaster)i_raster;
this._ref_size = i_raster.getSize();
}
开发者ID:walidBelfadel,项目名称:MARS_project,代码行数:5,代码来源:NyARBitmapRaster.cs
注:本文中的INyARRgbRaster类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论