| 
                 分類:[C#] 
  C#のWPFで画像処理のプログラムを書いているのですが,分からないことが,2つあります.
  (質問1) bitmap以外のファイルのピクセルの情報が取って来れずに困っています.
  bitmap場合,以下の手順でピクセル情報を取ってこれるんですが.... Uri tempUri = new Uri(this.PropMyOpenDialog.FileNames[i], UriKind.RelativeOrAbsolute); BitmapDecoder myBitmapDecoder = BitmapDecoder.Create(tempUri, BitmapCreateOptions.None, BitmapCacheOption.Default); BitmapSource myBitmapSource = myBitmapDecoder.Frames[0]; byte[] data = new byte[画像の幅*画像の高さ*チャンネル数]; data = target.CopyPixels(                 this.mData,                                     //格納先                 this.mPixelWidth * this.mChanelNum,             //スライド                 0                                               //オフセット );
  たとえば,jpegの場合, 以下のどちらのコードを書いてもbyteの配列の値が全て「255」になってしまいます. 何が足りないのでしょうか??
  //サンプル1 Uri tempUri = new Uri(this.PropMyOpenDialog.FileNames[i], UriKind.RelativeOrAbsolute); BitmapDecoder myBitmapDecoder = JpegBitmapDecoder.Create(tempUri, BitmapCreateOptions.None, BitmapCacheOption.Default); BitmapSource myBitmapSource = myBitmapDecoder.Frames[0]; byte[] data = new byte[画像の幅*画像の高さ*チャンネル数]; data = target.CopyPixels(                 this.mData,                                     //格納先                 this.mPixelWidth * this.mChanelNum,             //スライド                 0                                               //オフセット );
  //サンプル2 Uri tempUri = new Uri(this.PropMyOpenDialog.FileNames[i], UriKind.RelativeOrAbsolute); JpegBitmapDecoder myJpegBitmapDecoder = new JpegBitmapDecoder(tempUri, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); BitmapSource myBitmapSource = myJpegBitmapDecoder.Frames[0]; byte[] data = new byte[画像の幅*画像の高さ*チャンネル数]; data = target.CopyPixels(                 this.mData,                                     //格納先                 this.mPixelWidth * this.mChanelNum,             //スライド                 0                                               //オフセット );
  (質問2) ピクセルの情報をbitmapファイルとして書き出す場合に,BitmapSource.Createの引数strideで指定する値が分かりません. 32bitの場合 (PixelWidth * mPixelFormats.Bgr32.BitsPerPixel + 7) / 8 と指定すれば,正常に書き出せるのですが, (PixelWidth * mPixelFormats.Bgr24.BitsPerPixel + 7) / 8 24bitの場合正常に書き出されません. ビットマップのストライドって,「1行分の幅のbyte数が4で割り切れるように,幅のバイト数に余分なbyteを足したもの」ですよね?
  質問は以上の2つです. よろしくお願いします!!
 
 
 
 
  |