0

画像を引き裂いてパターンを見つける方法を学びたいと思っていますが、そのためにはまず何が構成されているかを確認する必要があります。png を取得してバイト配列に変換したいので、印刷して、配列値の単純なパターンを認識できるかどうかを確認できます。

これまでのところ、私はこれを持っています

public MainWindow()
{
    InitializeComponent();
    System.Drawing.Image image;
    image = System.Drawing.Image.FromFile("one.png");            

    byte[] imArray = imageToByteArray(image);

    String bytes = "";
    foreach (Char bite in imArray)
    {
        bytes += "-"+bite;
    }
    MessageBox.Show(bytes);


}

public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
    MemoryStream ms = new MemoryStream();
    imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
    return ms.ToArray();
}

しかし、それは機能していないようです。変換メソッドが呼び出されると、null エラーが発生します。私のコンペネントの理解はゼロであるため、これが機能しない理由はわかりません。

この変換を行うためのより簡単な方法を提案できる場合は、遠慮なく投稿してください。私はこのコードに固執していません。実際の例が欲しいだけなので、出発点があります。

ありがとう!

4

3 に答える 3

2

Bitmap から始めてバイナリ データを確認することをお勧めします。他のほとんどの形式ではデータが圧縮されて保存されるため、バイトを見て画像の内容を理解する機会はありません。

必要なメソッドはBitmap.LockBitsです。この記事には、ファイルから読み取ってビットを表示する方法の完全なサンプルも含まれています。以下に抜粋します。

Bitmap bmp = new Bitmap("c:\\fakePhoto.jpg");
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpData =
   bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat);

int bytes  = Math.Abs(bmpData.Stride) * bmp.Height;
byte[] rgbValues = new byte[bytes];

// Copy the RGB values into the array.
Marshal.Copy(bmpData.Scan0, rgbValues, 0, bytes);
于 2013-03-04T17:43:16.023 に答える
0

画像を dataURI に変換してから blob に変換してみてください。dataURI を blob に変換する方法の例を次に示します。DataURL から Blob?

function dataURItoBlob(dataURI) {

var byteString = atob(dataURI.split(',')[1]);
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);

for (var i = 0; i < byteString.length; i++) {
    ia[i] = byteString.charCodeAt(i);
  }

var bb = new BlobBuilder();
bb.append(ab); return bb.getBlob(mimeString);
}
于 2013-03-04T17:33:53.313 に答える
-1

または、ファイルをバイナリ エディタで開くこともできます。

于 2013-11-05T23:33:33.003 に答える