Справочная информация: я не профессиональный разработчик - я использовал C несколько десятилетий назад и Java несколько лет назад. Я ржаво. , Ширина изображения/высота не является проблемой.
соответствующий бит файла Libraw_types. "> typedef struct
{
ushort (*image)[4];
libraw_image_sizes_t sizes;
/*
Other members
*/
libraw_rawdata_t rawdata;
void *parent_class;
} libraw_data_t;
typedef struct
{
void *raw_alloc;
ushort *raw_image;
ushort (*color4_image)[4];
ushort (*color3_image)[3];
/*
Other members
*/
} libraw_rawdata_t;
< /code>
в c это обычно используется следующим образом: < /p>
LibRaw RawProcessor;
ret = RawProcessor.open_file(av)
ret = RawProcessor.unpack()
val = RawProcessor.imgdata.rawdata.raw_image[0];
< /code>
Из этого я предположил, что DLL управляет распределением памяти для данных изображения и заполняет структуры с указателями на массивы USHORT. Обертка JNA выглядит так (просто Snip, так как вложенные структуры обширны для мелодии> 1000 строк!): < /P>
public interface LibRaw extends Library {
public class LibRaw_data extends Structure {
public Pointer image;
/*
Other members
*/
public LibRaw_rawdata rawdata;
}
public class LibRaw_rawdata extends Structure {
public Pointer raw_alloc;
public Pointer raw_image;
//public PointerByReference raw_image = new PointerByReference();
/*
Other members
*/
}
LibRaw INSTANCE = (LibRaw) Native.loadLibrary(dllPath, LibRaw.class);
LibRaw_data libraw_init(int flags);
int libraw_open_file( LibRaw_data lr, String fname );
int libraw_unpack( LibRaw_data lr );
void libraw_close( LibRaw_data lr );
int libraw_raw2image();
int libraw_dcraw_process();
void libraw_close( LibRaw_data lr );
// ... other functions ...
}
< /code>
... и мой основной код имеет: < /p>
LibRaw.LibRaw_data librawdata = new LibRaw.LibRaw_data();
librawdata = LibRaw.INSTANCE.libraw_init(0);
retCode = LibRaw.INSTANCE.libraw_open_file( librawdata, fname );
retCode = LibRaw.INSTANCE.libraw_unpack( librawdata );
if (librawdata.rawdata.raw_image != null) ...
< /code>
Все это все компилируется OK и работает без ошибок, но после вызова разоблачения я ожидаю, что raw_image будет чем -то другим, кроме нуле Доступ к данным изображения.
Но, несмотря на все остальное, что появляется OK (другие значения действительны и разумные, без ошибок) RAW_IMAGE, а другой указатель данных изображения - все это NULL. < Br /> Я видел несколько примеров, которые кажутся актуальными, которые предполагают использование pointerbyReference, но это имеет одинаковый конечный результат, без ошибок и нулевых указателей. < /p>
Подробнее здесь: https://stackoverflow.com/questions/793 ... a-pointers