2011-09-10 13 views
0

wp7で画像処理をしようとしています。 これでconvertImagetoBytesとconvertByteToBitmapImageが終了しました。画像からbyte []を編集する際にエラーが発生しました

画像処理の作業を行うためにバイト配列の値を変更することができますが、 がピクチャボックスの黒い画像になります。 (今ちょうどたいプロセスの.jpg画像)

convertImagetoBytes

byte[] data = null; 

using (MemoryStream stream = new MemoryStream()) 
{ 
    WriteableBitmap wBitmap = new WriteableBitmap(bitmapImage); 
    wBitmap.SaveJpeg(stream, wBitmap.PixelWidth, wBitmap.PixelHeight, 0, 100); 
    stream.Seek(0, SeekOrigin.Begin); 
    data = stream.GetBuffer(); 
} 

convertBytestoImage今

MemoryStream stream = new MemoryStream(bytes); 
stream.Position = 0; 
BitmapImage bi = new BitmapImage(); 
bi.SetSource(stream); 
return bi; 

私はちょうどこの(グレースケール)のように、バイト配列内の値を変更した場合

for (int i = 0; i < bytesCount; i+=4) 
{ 
    colorTemp = data[i+2]; 
    data[i+1 ] =data[i+2]= data[i + 3] = (byte)colorTemp; 
} 

画像が黒くなっています。

+0

あなたのラインについては、この記事を読んで考える[私は+ 2]奇妙に思えますあなたが意図したようにグレースケールではありません) –

答えて

1

あなたはJPEGとして保存しましたが、生データであるかのように変更しようとしています。グレースケールを偽造するためにJPEGファイルのデータを混乱させることはできません。

ところで、stream.GetBuffer()の代わりにstream.ToArrayを使用してください。後者は通常、実際のデータよりも大きいためです。

関連する問題