2016-04-07 3 views
3

У меня есть прозрачное изображение png. Я прочитал этот файл, используя opencv. Затем я конвертирую его в растровое изображение следующим образом.Преобразование PNG в битмап с прозрачностью с использованием opencv

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 и изображении не отображается полностью. Но когда мы сохраняем это изображение Mat с помощью imwrite, проблем нет. Таким образом, проблемы, с которыми я столкнулся, -

  1. Прозрачность некоторых изображений.
  2. Данные полного изображения не отображаются. input image output image
+0

Ссылку вы ссылки, кажется, проблема с 'imshow', а не с самим изображением, вы можете изменить, чтобы показать, как вы инициализировали переменную 'Bitmap'? этот растровый класс в андроиде? – 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

Судя по образцу кода пользователей, он не означает растровые файлы, а класс bitmap в C++ ... Я думаю, что это класс bitmap для android. – api55

+0

@ api55 ... ну в этом случае, лично, я думаю, что объявление Mat с 'jint * buf = env-> GetIntArrayElements()' и обработка растрового изображения как int array в C++ более удобна :) –

+0

уверен, это может быть больше (однако я предпочитаю придерживаться uchar представления opencv), но все же он не решает проблему ... Я думаю, что он использует другое представление для байтов или что-то в этом направлении, но не уверен, пока он не ответит назад – api55

Смежные вопросы