Система преобразования :: Рисование :: Растровое изображение ^ в пиксель * (лептоника) - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть растровое изображение в памяти, которое передается в мою библиотеку из приложения C #. Мне нужно преобразовать его в лептонику Pix *, чтобы передать ее в тессеракт. И наоборот, мне нужно будет взять Pix * из порогового изображения и преобразовать его обратно в растровое изображение, чтобы вернуть его в приложение C #, но я еще не там. Вот мой код для перехода от растрового изображения к пикселю:

Pix* OcrProcessor::ToPix(Bitmap^ bitmap)
{
    const auto rect = new Drawing::Rectangle(0, 0, bitmap->Width, bitmap->Height);
    const auto bitmap_data = bitmap->LockBits(*rect, ImageLockMode::ReadOnly, bitmap->PixelFormat);
    auto ptr = bitmap_data->Scan0;
    const auto bytes = Math::Abs(bitmap_data->Stride) * bitmap->Height;
    const auto rgb_values = gcnew array<unsigned char>(bytes);
    Marshal::Copy(ptr, rgb_values, 0, bytes);
    auto handle = GCHandle::Alloc(rgb_values, GCHandleType::Pinned);
    const auto data = static_cast<unsigned char*>(static_cast<void*>(handle.AddrOfPinnedObject()));
    const auto converted = pixReadMemBmp(data, bytes);
    bitmap->UnlockBits(bitmap_data);
    delete rect;
    return converted;
}

Преобразованный Pix * всегда равен нулю в конце. Шагая по коду, rgb_values ​​- это всегда массив, заполненный 255, вместо того, чтобы заполняться растровыми данными. Я не сильно инвестирую в этот конкретный метод, если у кого-то есть рабочий метод, чтобы выполнить то, что я ищу.

...