2016-04-07 47 views
3

私は透明なpngイメージを持っています。 opencvを使ってそのファイルを読みました。それから私はビットマップに次のように変換しています。opencvを使ってPNGを透明にビットマップに変換

Mat image = imread("fruit.png", -1); 
BYTE * rawdata = reinterpret_cast<BYTE*>(image.data); 
m_pBitmap->CopyFromMemory(NULL, rawdata, image.cols * 4); 
m_pRenderTarget->DrawBitmap(m_pBitmap); 

しかし、いくつかの画像を変換した後には、いくつかの透明性の問題...このlinkのように同じことを示し、画像がフル表示されません。しかし、私たちがimwriteを使ってそのマットイメージを保存しても問題はありません。 私が直面している問題は、

  1. です。一部の画像の透明度が失われています。
  2. 完全な画像データが表示されていません。異なるライブラリーが自分のデコードや表現方法を持っているので input image output image
+0

あなたは、参照リンクは、あなたがどのように表示するように編集することができ、画像そのものではなく、imshow' 'に問題があるように思われます'Bitmap'変数を初期化しましたか?このビットマップクラスは、アンドロイド1? – api55

答えて

2

あなたは、OpenCVの内の画像フォーマットを変換する必要があります。

は、以下のコードを試してみてください。

Mat image = imread("fruit.png", -1); 
Mat image_bmp; 
image.convertTo(image_bmp, CV_8UC3); 
imwrite("fruit.bmp", image_bmp); 

あなたは、ファイル名に.bmpまたは.jpgで画像を保存したい形式で指定することができます。

結果は(当然のサイズ変更後)次のようになります。

enter image description here

+0

サンプルコードで判断すると、彼はビットマップファイルではなく、C++のビットマップクラスです...私はそれがアンドロイドビットマップクラスだと思います。 – api55

+0

@ api55 ...その場合、個人的には、私は 'jint * buf = env-> GetIntArrayElements()'でMatを宣言し、C++でビットマップをint配列として扱うほうが便利だと思います:) –

+0

確かに、便利です(しかし、私はopencvのuchar表現に頼ることを好む)が、まだ問題を解決していない...私は彼がその方向のバイトまたは何かのために別の表現を使用していると思うが、 back – api55

関連する問題