LEADTOOLS(Leadtoolsアセンブリ)

フレームを表示

GetRow(Int32、Byte[]、Int32、Int32)メソッド








取り戻す行の番号。最初の行は0です、そして、最後の行はimage高さより少ない1です。
このメソッドが取得する画像データを保持するために、バッファーに入れます。このバッファのサイズは、画像データを保持するのに十分大きくなければなりません。
取得操作が開始するバッファの0から始まるインデックス。

取り戻す行のバイト数。完全な行を取得するために、BytesPerLineプロパティで値を使います

全行より少ない行を取得する場合は、ビット数を考慮します。1ビット画像の場合、各々のbyteは8ピクセルを表します。4ビット画像の場合、各々のbyteは2ピクセルを表します。8ビットimageのために、各々のbyteは、1ピクセルを表します。16ビットのために、imageは1つのピクセルを2バイトおきに表します。24-ビットイメージ、あらゆる3バイト、1つのピクセルを表します。32ビットのために、imageは1つのピクセルを4バイトおきに表します。48-ビットイメージ、あらゆる6バイト、1つのピクセルを表します。8バイトおきに64ビットイメージのために、1つのピクセルを表します。

ピクセルの特定番号のために必要とされるバイト数を計算するために、整数数学でBitsPerPixelプロパティを使うことができます。たとえば:

NumberOfBytes = (Image.BitsPerPixel * NumberOfPixels) / 8; if((Image.BitsPerPixel * NumberOfPixels) % 8) NumberOfBytes = NumberOfBytes + 1; // Round up if necessary for a 1- or 4-bit image

1行以上の画像データをこのRasterImageからマネージドメモリバッファに取得します。
構文
public int GetRow( 
   int row,
   byte[] buffer,
   int bufferIndex,
   int bufferCount
)
'Declaration
 
Public Overloads Function GetRow( _
   ByVal row As Integer, _
   ByVal buffer() As Byte, _
   ByVal bufferIndex As Integer, _
   ByVal bufferCount As Integer _
) As Integer
'Usage
 
Dim instance As RasterImage
Dim row As Integer
Dim buffer() As Byte
Dim bufferIndex As Integer
Dim bufferCount As Integer
Dim value As Integer
 
value = instance.GetRow(row, buffer, bufferIndex, bufferCount)
public int GetRow( 
   int row,
   byte[] buffer,
   int bufferIndex,
   int bufferCount
)
- (NSInteger)getRow:(NSInteger)row 
             buffer:(unsigned char *)buffer 
        bufferCount:(unsigned long)count 
              error:(NSError **)error
            
public long getRow(
  int row, 
  byte[] buffer, 
  int bufferIndex, 
  long bufferCount
)
            
 function Leadtools.RasterImage.GetRow(Int32,Byte[],Int32,Int32)( 
   row ,
   buffer ,
   bufferIndex ,
   bufferCount 
)

パラメーター

取り戻す行の番号。最初の行は0です、そして、最後の行はimage高さより少ない1です。
バッファ
このメソッドが取得する画像データを保持するために、バッファーに入れます。このバッファのサイズは、画像データを保持するのに十分大きくなければなりません。
bufferIndex
取得操作が開始するバッファの0から始まるインデックス。
bufferCount

取り戻す行のバイト数。完全な行を取得するために、BytesPerLineプロパティで値を使います

全行より少ない行を取得する場合は、ビット数を考慮します。1ビット画像の場合、各々のbyteは8ピクセルを表します。4ビット画像の場合、各々のbyteは2ピクセルを表します。8ビットimageのために、各々のbyteは、1ピクセルを表します。16ビットのために、imageは1つのピクセルを2バイトおきに表します。24-ビットイメージ、あらゆる3バイト、1つのピクセルを表します。32ビットのために、imageは1つのピクセルを4バイトおきに表します。48-ビットイメージ、あらゆる6バイト、1つのピクセルを表します。8バイトおきに64ビットイメージのために、1つのピクセルを表します。

ピクセルの特定番号のために必要とされるバイト数を計算するために、整数数学でBitsPerPixelプロパティを使うことができます。たとえば:

NumberOfBytes = (Image.BitsPerPixel * NumberOfPixels) / 8; if((Image.BitsPerPixel * NumberOfPixels) % 8) NumberOfBytes = NumberOfBytes + 1; // Round up if necessary for a 1- or 4-bit image

戻り値

バイト数はコピーしました。
解説

このメソッドは、RasterImageオブジェクトから指定するバッファへ画像データをコピーします。正確にそれがimageで保存されて、データはコピーされます。

このメソッドを使うとき、画像メモリはロックされなければなりません。通常、このメソッドを使う操作を開始する前にメモリをロックするために、Accessを呼び出すことができます。そして、操作が終わるとき、リリースを呼び出します。

注意:バッファのデータは、BytesPerLineにパディングされます。

各々の行のバイト数を決定するRasterImageオブジェクトのBytesPerLineプロパティを使います。カラーオーダーは、Orderプロパティによって決定されます。この値はRasterByteOrder.Rgb、RasterByteOrder.Bgr、RasterByteOrder.GrayまたはRasterByteOrder.RommRasterByteOrderに設定できます。グレーは、12ビットと16ビットのグレースケール画像でのみ有効です。12と16ビットグレースケールイメージのサポートは、Document/Medicalイメージングエディションのみで利用できます。

サンプル

このサンプルは、画像データを上下に反転するために、Get/SetRowを使います。

Copy Code  
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Core
Imports Leadtools.ImageProcessing.Color
Imports Leadtools.Controls
Imports Leadtools.Dicom
Imports Leadtools.Drawing
Imports Leadtools.Svg

      
Public Sub GetRowTest()
   Dim codecs As RasterCodecs = New RasterCodecs()
   Dim image As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1.CMP"))
   Dim row1 As Byte() = New Byte(image.BytesPerLine - 1) {}
   Dim row2 As Byte() = New Byte(image.BytesPerLine - 1) {}

   If image.IsGlobalMemory Then
      image.Access()
   End If
   Dim y As Integer = 0
   Do While y < image.Height \ 2
      image.GetRow(y, row1, 0, row1.Length)
      image.GetRow(image.Height - y - 1, row2, 0, row2.Length)

      image.SetRow(y, row2, 0, row2.Length)
      image.SetRow(image.Height - y - 1, row1, 0, row1.Length)
      y += 1
   Loop
   If image.IsGlobalMemory Then
      image.Release()
   End If

   codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_getrow.BMP"), RasterImageFormat.Bmp, 0)

   image.Dispose()
   codecs.Dispose()
End Sub

Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Dicom;
using Leadtools.Drawing;
using Leadtools.Controls;
using Leadtools.Svg;

      
public void GetRowTest()
{
   RasterCodecs codecs = new RasterCodecs();
   RasterImage image = codecs.Load(Path.Combine(ImagesPath.Path, "IMAGE1.CMP"));
   byte[] row1 = new byte[image.BytesPerLine];
   byte[] row2 = new byte[image.BytesPerLine];

   if(image.IsGlobalMemory)
      image.Access();
   for(int y = 0; y < image.Height / 2; y++)
   {
      image.GetRow(y, row1, 0, row1.Length);
      image.GetRow(image.Height - y - 1, row2, 0, row2.Length);

      image.SetRow(y, row2, 0, row2.Length);
      image.SetRow(image.Height - y - 1, row1, 0, row1.Length);
   }
   if(image.IsGlobalMemory)
      image.Release();

   codecs.Save(image, Path.Combine(ImagesPath.Path, "IMAGE1_getrow.BMP"), RasterImageFormat.Bmp, 0);

   image.Dispose();
   codecs.Dispose();
}
RasterImageExamples.prototype.GetRowTest = function ( )
{
   Tools.SetLicense ( ) ;

   with (Leadtools) {
      with (Leadtools.Codecs) {
         var codecs = new RasterCodecs();

         var srcFileName = "Assets\\Image1.cmp";
         var image;
         return Tools.AppInstallFolder().getFileAsync(srcFileName).then(function (loadFile) {
            return codecs.loadAsync(LeadStreamFactory.create(loadFile))
         })
            .then(function (img) {
               image = img;

               var row1 = new Array(image.BytesPerLine);
               var row2 = new Array(image.BytesPerLine);

               if (image.isGlobalMemory)
                  image.accessData();
               for (var y = 0; y < image.height / 2; y++) {
                  image.getRow(y, row1, 0, row1.length);
                  image.getRow(image.height - y - 1, row2, 0, row2.length);

                  image.setRow(y, row2, 0, row2.length);
                  image.setRow(image.height - y - 1, row1, 0, row1.length);
               }
               if (image.isGlobalMemory)
                  image.releaseData();

               return Tools.AppLocalFolder().createFileAsync("IMAGE1_getrow.BMP")
            })
            .then(function (saveFile) {
               var saveStream = LeadStreamFactory.create(saveFile);
               return codecs.saveAsync(image, saveStream, RasterImageFormat.bmp, 24)
            })
            .then(function () {

               image.close();
               codecs.close();
            });
      }
   }
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Dicom;

      
public async Task GetRowTest()
{
   RasterCodecs codecs = new RasterCodecs();
   string srcFileName = @"Assets\Image1.cmp";
   StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(srcFileName);
   RasterImage image = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile));

   byte[] row1 = new byte[image.BytesPerLine];
   byte[] row2 = new byte[image.BytesPerLine];

   if (image.IsGlobalMemory)
      image.AccessData();
   for (int y = 0; y < image.Height / 2; y++)
   {
      image.GetRow(y, row1, 0, row1.Length);
      image.GetRow(image.Height - y - 1, row2, 0, row2.Length);

      image.SetRow(y, row2, 0, row2.Length);
      image.SetRow(image.Height - y - 1, row1, 0, row1.Length);
   }
   if (image.IsGlobalMemory)
      image.ReleaseData();

   StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync("IMAGE1_getrow.BMP");
   ILeadStream saveStream = LeadStreamFactory.Create(saveFile);
   await codecs.SaveAsync(image, saveStream, RasterImageFormat.Bmp, 24);

   image.Dispose();
   codecs.Dispose();
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Dicom;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Examples;
using Leadtools.Windows.Media;

public void GetRowTest(RasterImage image, Stream destStream)
{
   byte[] row1 = new byte[image.BytesPerLine];
   byte[] row2 = new byte[image.BytesPerLine];
   if (image.IsGlobalMemory)
      image.Access();
   for (int y = 0; y < image.Height / 2; y++)
   {
      image.GetRow(y, row1, 0, row1.Length);
      image.GetRow(image.Height - y - 1, row2, 0, row2.Length);

      image.SetRow(y, row2, 0, row2.Length);
      image.SetRow(image.Height - y - 1, row1, 0, row1.Length);
   }
   if (image.IsGlobalMemory)
      image.Release();

   RasterCodecs codecs = new RasterCodecs();
   codecs.Save(image, destStream, RasterImageFormat.Bmp, 0);

   image.Dispose();
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Dicom
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Core
Imports Leadtools.ImageProcessing.Color
Imports Leadtools.Windows.Media

Public Sub GetRowTest(ByVal image As RasterImage, ByVal destStream As Stream)
   Dim row1 As Byte() = New Byte(image.BytesPerLine - 1){}
   Dim row2 As Byte() = New Byte(image.BytesPerLine - 1){}
   If image.IsGlobalMemory Then
      image.Access()
   End If
   Dim y As Integer = 0
   Do While y < image.Height / 2
      image.GetRow(y, row1, 0, row1.Length)
      image.GetRow(image.Height - y - 1, row2, 0, row2.Length)

      image.SetRow(y, row2, 0, row2.Length)
      image.SetRow(image.Height - y - 1, row1, 0, row1.Length)
      y += 1
   Loop
   If image.IsGlobalMemory Then
      image.Release()
   End If

   Dim codecs As RasterCodecs = New RasterCodecs()
   codecs.Save(image, destStream, RasterImageFormat.Bmp, 0)

   image.Dispose()
End Sub
必要条件

ターゲットプラットホーム

参照

参照

RasterImageクラス
RasterImageメンバ
オーバーロードリスト