2017-05-16 13 views
1

ASP.NETでZXing.NETを使用してEAN 13バーコードを生成し、base64文字列に変換したいと考えています。 ZXing.Netを使用してEANバーコードを生成し、base64文字列を取得

var base64String = string.Empty; 
using (Image<Rgba32> image = Image.Load<Rgba32>(pixelData.Pixels)) 
{ 
    base64String = image.ToBase64String(); 
} 

ImageSharp

を使用して、私がしようとしていた

BarcodeWriterPixelData writer = new BarcodeWriterPixelData() 
{ 
    Format = BarcodeFormat.EAN_13 
}; 
var pixelData = writer.Write(barcodeModel.BarcodeNumber); 

しかし、それは働いていない:

私はから取得していますBarcodeWriterPixelDataを変換する方法に問題があります。

答えて

2

これを行うにはSystem.Drawing.Bitmapを使用できます。 CoreCompat.System.Drawing nugetパッケージへの参照を追加します(これはベータ版でだ)してから、このコードを使用します。私はまだリリースされていないImageSharpを知っている限りで

BarcodeWriterPixelData writer = new BarcodeWriterPixelData() 
{ 
    Format = BarcodeFormat.EAN_13 
}; 
var pixelData = writer.Write(barcodeModel.BarcodeNumber); 

using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb)) 
{ 
    using (var ms = new System.IO.MemoryStream()) 
    { 
     var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb); 
     try 
     { 
      // we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image 
      System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length); 
     } 
     finally 
     { 
      bitmap.UnlockBits(bitmapData); 
     } 

     // PNG or JPEG or whatever you want 
     bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
     var base64str = Convert.ToBase64String(ms.ToArray()); 
    } 
} 

を。私はthis answerに基づいてCoreCompactを推奨しました。

+0

エラーが発生しました非呼び出し可能メンバー 'Rectangle'はメソッドのように使用できません。 – Cieja

+0

申し訳ありませんが、私は何とか "新しい"部分を削除しました。編集して、今すぐお試しください。 –

+0

これは動作しますが、最初のusingステートメントで別のエラーが発生しました。 'System.Drawing.GDIPlus'の型初期化子が例外をスローしました。メッセージ= "DLLを読み込めません 'gdiplus:指定されたモジュールが見つかりませんでした。\ n(HRESULTの例外:0x8007007E)" – Cieja

1

ImageSharpを使用して生のピクセルデータを読み込むことができます(pixelData.Pixelsは生のrgba32形式のピクセルデータを含むバイト[])。代わりにあなたが最終的負荷コードは次のようになりますが、Image.LoadPixelData<Rgba32>(data)

を使用する必要がありますImage.Load<Rgba32>(data, width, height)を使用する:

var base64String = string.Empty; 
using (Image<Rgba32> image = Image.LoadPixelData<Rgba32>(pixelData.Pixels, width, height)) 
{ 
    base64String = image.ToBase64String(ImageFormats.Png); 
} 

基本的にImage.Load<Rgba32>(data) APIはすなわち、PNG、JPGなどのフォーマットされたデータの符号化されたデータをロードするためのものです。apiは、後で処理/保存するために生のピクセルデータをイメージオブジェクトにロードするためのものです。

関連する問題