画像データの複製 (1)
Namespace: FVIL.IplAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
public virtual Object CopyFrom( Object src ) |
Visual Basic |
---|
Public Overridable Function CopyFrom ( src As Object ) As Object |
Parameters
- src
- Type: System..::..Object
複製元
Return Value
Type: Object複製後の自身のインスタンスを返します。
Implements
IFviCopyable..::..CopyFrom(Object)Remarks
同一型が指定された場合は Pointer フィールドに設定されたアドレスをそのままコピーします。
複製処理前の解放や再確保を行わない事にご注意ください。
画像オブジェクトが指定された場合は画像データを複製します。
このインスタンスの Pointer フィールドに有効なアドレスが設定されている必要があります。
処理可能な条件については、本クラスの説明と後述の対応表をご参照ください。
複製可能な画像オブジェクト:
- CFviImage ... 画像オブジェクト
- CFviGdiImage ... GDI 画像オブジェクト
- FHANDLE ... FIE 画像オブジェクト (下記のオブジェクトタイプ)
カラー画像の濃淡化:
カラー画像を濃淡化する際の係数は CoefficientRed, CoefficientGreen, CoefficientBlue で変更できます。
対応表: IPL ← CFviImage (画像オブジェクト)
WIL 側 | IPL 側 (x1ch) | IPL 側 (xNch) |
---|---|---|
Unpack x1ch |
同一の値を書き込みます。 |
各チャネルに同一の値を書き込みます。 4 チャネルまで許容します。 |
Unpack xNch |
濃淡化して書き込みます。 WIL側の チャネル 0,1,2,3 が R,G,B,A を表わします。 3 チャネル目は無視します。 |
4 チャネルまで許容します。 チャネル数が一致している必要があります。 WIL側は 0,1,2,3 が R,G,B,A を表わします。 IPL側は 0,1,2,3 が B,G,R,A を表わします。 |
RGB24 x1ch |
濃淡化して書き込みます。 |
3 または 4 チャネルを許容します。 4 チャネルの場合、3チャネル目(A コンポーネント)は上書きしません。 |
RGB32 x1ch |
濃淡化して書き込みます。 |
3 または 4 チャネルを許容します。 3 チャネルの場合、複製元の A フィールドは無視します。 |
※ 表中の Unpack は ImageType の UC8,US16,S16,I32,F32,D64 を意味します。
対応表: IPL ← CFviGdiImage (GDI 画像オブジェクト)
WIL 側 | IPL 側 (x1ch) | IPL 側 (xNch) |
---|---|---|
8bpp |
同一の値を書き込みます。 |
各チャネルに同一の値を書き込みます。 4 チャネルまで許容します。 |
24bpp |
濃淡化して書き込みます。 |
3 または 4 チャネルを許容します。 4 チャネルの場合、3チャネル目(A コンポーネント)は上書きしません。 |
32bpp |
濃淡化して書き込みます。 A フィールドは無視します。 |
3 または 4 チャネルを許容します。 3 チャネルの場合、複製元の A フィールドは無視します。 |
対応表: IPL ← FHANDLE (FIE 画像オブジェクト)
WIL 側 | IPL 側 (x1ch) | IPL 側 (xNch) |
---|---|---|
Unpack x1ch |
同一の値を書き込みます。 |
各チャネルに同一の値を書き込みます。 4 チャネルまで許容します。 |
Unpack xNch |
濃淡化して書き込みます。 WIL側の チャネル 0,1,2,3 が R,G,B,A を表わします。 3 チャネル目は無視します。 |
4 チャネルまで許容します。 チャネル数が一致している必要があります。 WIL側は 0,1,2,3 が R,G,B,A を表わします。 IPL側は 0,1,2,3 が B,G,R,A を表わします。 |
RGBTRIPLE x1ch |
濃淡化して書き込みます。 |
3 または 4 チャネルを許容します。 4 チャネルの場合、3チャネル目(A コンポーネント)は上書きしません。 |
RGBQUAD x1ch |
濃淡化して書き込みます。 |
3 または 4 チャネルを許容します。 3 チャネルの場合、複製元の A フィールドは無視します。 |
※ 表中の Unpack は f_imgtype の UC8,US16,S16,I32,FLOAT,DOUBLE を意味します。
処理に失敗した場合は例外が発行されます。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。
エラーコード:
値 | ErrorCode メンバ | 内容 |
---|---|---|
1 | FVIL.ErrorCode.FAILED_TO_ALLOCATE | 領域の確保に失敗しました。 |
11 | FVIL.ErrorCode.INVALID_PARAMETER | 引数に指定されたインスタンスが不正です。 |
16 | FVIL.ErrorCode.INVALID_IMAGETYPE | 対応する画像種別がありません。 |
17 | FVIL.ErrorCode.INVALID_IMAGESIZE | 幅、高さが許容範囲外です。 |
18 | FVIL.ErrorCode.INVALID_CHANNEL | チャネル数が許容範囲外です。 |
21 | FVIL.ErrorCode.NOT_SUPPORTED | サポートしていない条件が指定されました。 |
23 | FVIL.ErrorCode.NOT_ALLOCATED | 画像データ領域が確保されていません。 |
96 | FVIL.ErrorCode.NOMATCH_IMAGESIZE | 画像の幅または高さが一致していません。 |
97 | FVIL.ErrorCode.NOMATCH_CHANNEL | 画像のチャネル数が一致していません。 |
Examples
トピック:
C#:
IPL ← CFviImage:
IPL ← CFviGdiImage:
IPL ← FHANDLE:
Visual Basic:
IPL ← CFviImage:
IPL ← CFviGdiImage:
IPL ← FHANDLE:
C#:
IPL ← CFviImage:
C# | Copy |
---|---|
// $Revision: 1.3 $ using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Drawing; using System.Reflection; namespace SampleCode.Ipl { partial class Converter { public static void CopyFrom1() { Console.WriteLine(MethodBase.GetCurrentMethod().Name); // 1) 画像準備. FVIL.Data.CFviImage src = new FVIL.Data.CFviImage("floppy_RGB.jpg"); // 2) IplImage のサイズ情報の取得. FVIL.Ipl.IplImageSize size = FVIL.Ipl.IplImageConverter.ToIplImageSize(src); // 3) 確保.(取得したサイズ情報に従って確保する) IntPtr dst = cvCreateImage(cvSize(size.width, size.height), size.depth, size.channels); if (dst == IntPtr.Zero) throw new FVIL.CFviException(FVIL.ErrorCode.FAILED_TO_ALLOCATE, "cvCreateImage"); // 4) IplImage 構造体へのポインタを IplImageConverter に設定する. FVIL.Ipl.IplImageConverter converter = new FVIL.Ipl.IplImageConverter(dst); // 5) 複製.(CFviImage から画像データを複製する) converter.CopyFrom( src ); // -) 確認.(任意) int[] save_param = { (int)CV_IMWRITE.CV_IMWRITE_PNG_COMPRESSION, 3 }; cvSaveImage("IplImageConverter_CopyFrom1.png", dst, save_param); // 6) 解放.(IplImage を 解放する) cvReleaseImage( ref dst ); } } } |
IPL ← CFviGdiImage:
C# | Copy |
---|---|
// $Revision: 1.3 $ using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Drawing; using System.Reflection; namespace SampleCode.Ipl { partial class Converter { public static void CopyFrom2() { Console.WriteLine(MethodBase.GetCurrentMethod().Name); // 1) 画像準備. FVIL.GDI.CFviGdiImage src = new FVIL.GDI.CFviGdiImage("floppy_RGB.jpg"); // 2) IplImage のサイズ情報の取得. FVIL.Ipl.IplImageSize size = FVIL.Ipl.IplImageConverter.ToIplImageSize(src); // 3) 確保.(取得したサイズ情報に従って確保する) IntPtr dst = cvCreateImage(cvSize(size.width, size.height), size.depth, size.channels); if (dst == IntPtr.Zero) throw new FVIL.CFviException(FVIL.ErrorCode.FAILED_TO_ALLOCATE, "cvCreateImage"); // 4) IplImage 構造体へのポインタを IplImageConverter に設定する. FVIL.Ipl.IplImageConverter converter = new FVIL.Ipl.IplImageConverter(dst); // 5) 複製.(CFviGdiImage から画像データを複製する) converter.CopyFrom( src ); // -) 確認.(任意) int[] save_param = { (int)CV_IMWRITE.CV_IMWRITE_PNG_COMPRESSION, 3 }; cvSaveImage("IplImageConverter_CopyFrom2.png", dst, save_param); // 6) 解放.(IplImage を 解放する) cvReleaseImage( ref dst ); } } } |
IPL ← FHANDLE:
C# | Copy |
---|---|
// $Revision: 1.3 $ using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Drawing; using System.Reflection; using fvalgcli; namespace SampleCode.Ipl { partial class Converter { public static void CopyFrom3() { Console.WriteLine(MethodBase.GetCurrentMethod().Name); FHANDLE hsrc = IntPtr.Zero; IntPtr dst = IntPtr.Zero; try { // 1) 画像準備. api.fnFIE_load_img_file("floppy_RGB.jpg", ref hsrc, f_color_img_type.F_COLOR_IMG_TYPE_RGBQ); if (hsrc == IntPtr.Zero) throw new FVIL.CFviException(FVIL.ErrorCode.FAILED_TO_ALLOCATE, "fnFIE_load_img_file"); // 2) IplImage のサイズ情報の取得. FVIL.Ipl.IplImageSize size = FVIL.Ipl.IplImageConverter.ToIplImageSize(hsrc); // 3) 確保.(取得したサイズ情報に従って確保する) dst = cvCreateImage(cvSize(size.width, size.height), size.depth, size.channels); if (dst == IntPtr.Zero) throw new FVIL.CFviException(FVIL.ErrorCode.FAILED_TO_ALLOCATE, "cvCreateImage"); // 4) IplImage 構造体へのポインタを IplImageConverter に設定する. FVIL.Ipl.IplImageConverter converter = new FVIL.Ipl.IplImageConverter(dst); // 5) 複製.(FIE 画像オブジェクトから画像データを複製する) converter.CopyFrom( hsrc ); // -) 確認.(任意) int[] save_param = { (int)CV_IMWRITE.CV_IMWRITE_PNG_COMPRESSION, 3 }; cvSaveImage("IplImageConverter_CopyFrom3.png", dst, save_param); } finally { // 6) 解放. cvReleaseImage( ref dst ); api.fnFIE_free_object(hsrc); } } } } |
Visual Basic:
IPL ← CFviImage:
Visual Basic | Copy |
---|---|
' $Revision: 1.2 $ Imports System.Collections.Generic Imports System.Text Imports System.Runtime.InteropServices Imports System.Drawing Imports System.Reflection Namespace Ipl Partial Class Converter Public Shared Sub CopyFrom1() Console.WriteLine(MethodBase.GetCurrentMethod().Name) ' 1) 画像準備. Dim src As New FVIL.Data.CFviImage("floppy_RGB.jpg") ' 2) IplImage のサイズ情報の取得. Dim size As FVIL.Ipl.IplImageSize = FVIL.Ipl.IplImageConverter.ToIplImageSize(src) ' 3) 確保.(取得したサイズ情報に従って確保する) Dim dst As IntPtr = cvCreateImage(cvSize(size.width, size.height), size.depth, size.channels) If dst = IntPtr.Zero Then Throw New FVIL.CFviException(FVIL.ErrorCode.FAILED_TO_ALLOCATE, "cvCreateImage") End If ' 4) IplImage 構造体へのポインタを IplImageConverter に設定する. Dim converter As New FVIL.Ipl.IplImageConverter(dst) ' 5) 複製.(CFviImage から画像データを複製する) converter.CopyFrom(src) ' -) 確認.(任意) Dim save_param As Integer() = {CInt(CV_IMWRITE.CV_IMWRITE_PNG_COMPRESSION), 3} cvSaveImage("IplImageConverter_CopyFrom1.png", dst, save_param) ' 6) 解放.(IplImage を 解放する) cvReleaseImage(dst) End Sub End Class End Namespace |
IPL ← CFviGdiImage:
Visual Basic | Copy |
---|---|
' $Revision: 1.2 $ Imports System.Collections.Generic Imports System.Text Imports System.Runtime.InteropServices Imports System.Drawing Imports System.Reflection Namespace Ipl Partial Class Converter Public Shared Sub CopyFrom2() Console.WriteLine(MethodBase.GetCurrentMethod().Name) ' 1) 画像準備. Dim src As New FVIL.GDI.CFviGdiImage("floppy_RGB.jpg") ' 2) IplImage のサイズ情報の取得. Dim size As FVIL.Ipl.IplImageSize = FVIL.Ipl.IplImageConverter.ToIplImageSize(src) ' 3) 確保.(取得したサイズ情報に従って確保する) Dim dst As IntPtr = cvCreateImage(cvSize(size.width, size.height), size.depth, size.channels) If dst = IntPtr.Zero Then Throw New FVIL.CFviException(FVIL.ErrorCode.FAILED_TO_ALLOCATE, "cvCreateImage") End If ' 4) IplImage 構造体へのポインタを IplImageConverter に設定する. Dim converter As New FVIL.Ipl.IplImageConverter(dst) ' 5) 複製.(CFviGdiImage から画像データを複製する) converter.CopyFrom(src) ' -) 確認.(任意) Dim save_param As Integer() = {CInt(CV_IMWRITE.CV_IMWRITE_PNG_COMPRESSION), 3} cvSaveImage("IplImageConverter_CopyFrom2.png", dst, save_param) ' 6) 解放.(IplImage を 解放する) cvReleaseImage(dst) End Sub End Class End Namespace |
IPL ← FHANDLE:
Visual Basic | Copy |
---|---|
' $Revision: 1.2 $ Imports System.Collections.Generic Imports System.Text Imports System.Runtime.InteropServices Imports System.Drawing Imports System.Reflection Imports fvalgcli Namespace Ipl Partial Class Converter Public Shared Sub CopyFrom3() Console.WriteLine(MethodBase.GetCurrentMethod().Name) Dim hsrc As FHANDLE = IntPtr.Zero Dim dst As IntPtr = IntPtr.Zero Try ' 1) 画像準備. api.fnFIE_load_img_file("floppy_RGB.jpg", hsrc, f_color_img_type.F_COLOR_IMG_TYPE_RGBQ) If hsrc = IntPtr.Zero Then Throw New FVIL.CFviException(FVIL.ErrorCode.FAILED_TO_ALLOCATE, "fnFIE_load_img_file") End If ' 2) IplImage のサイズ情報の取得. Dim size As FVIL.Ipl.IplImageSize = FVIL.Ipl.IplImageConverter.ToIplImageSize(hsrc) ' 3) 確保.(取得したサイズ情報に従って確保する) dst = cvCreateImage(cvSize(size.width, size.height), size.depth, size.channels) If dst = IntPtr.Zero Then Throw New FVIL.CFviException(FVIL.ErrorCode.FAILED_TO_ALLOCATE, "cvCreateImage") End If ' 4) IplImage 構造体へのポインタを IplImageConverter に設定する. Dim converter As New FVIL.Ipl.IplImageConverter(dst) ' 5) 複製.(FIE 画像オブジェクトから画像データを複製する) converter.CopyFrom(hsrc) ' -) 確認.(任意) Dim save_param As Integer() = {CInt(CV_IMWRITE.CV_IMWRITE_PNG_COMPRESSION), 3} cvSaveImage("IplImageConverter_CopyFrom3.png", dst, save_param) Finally ' 6) 解放. cvReleaseImage(dst) api.fnFIE_free_object(hsrc) End Try End Sub End Class End Namespace |
Exceptions
Exception | Condition |
---|---|
FVIL..::..CFviException | この例外の原因については、上記のエラーコード表をご参照ください。 |