Пытаясь прочитать данные необработанного изображения в Java через JNI -- java-native-interface поле с участием bufferedimage пол Связанный проблема

Trying to read raw image data into Java through JNI


0
vote

проблема

русский

Я использую JNI для получения данных необработанного изображения в следующем формате:

Данные изображения возвращаются в формате Data32 (32 бита) на пиксель в линейном массиве, заказанном сверху слева от изображения в нижнем правом направлении, идущем слева направо на каждую строку. Каждый пиксель имеет верхние 8 бит в качестве альфа-канала, а нижние 8 бит - это синий канал - поэтому биты пикселей являются ARGB (от большинства до наименее значимых, 8 бит на канал). Вы должны поставить данные обратно в какой-то момент.

Формат data32 по сути, если unsigned int в C.

Так что я получаю массив INT [], а затем попытаться создать буферное изображение из него с помощью

 <код>         int w = 1920;         int h = 1200;          BufferedImage b = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);            int[] f = (new Capture()).capture();         for(int i = 0; i < f.length; i++){;                 b.setRGB(x, y, f[i]);         }   

f - массив с данными пикселей.

Согласно документации Java, это должно работать с момента BufferedImage.type_int_argb:

представляет изображение с 8-битными цветовыми компонентами RGBA, упакованные в целочисленные пиксели. Изображение имеет Directolorormodel с альфа. Цветные данные на этом изображении считаются не преподобными альфа. Когда этот тип используется в качестве аргумента Imagetype для конструктора BufferedImage, создаваемое изображение соответствует изображениям, созданным в JDK1.1, и более ранних выпусках.

Если у 8-битной RGBA они означают, что все компоненты, добавленные вместе, кодируются в 8битах? Но это невозможно.

Этот код работает, но изображение, которое производится, совсем не похоже на изображение, которое оно должно производить. Есть тонны артефактов. Кто-нибудь может увидеть что-то, очевидно неправильно здесь?

Примечание. Я получаю данные моего пикселя с

 <код> imlib_context_set_image(im); data = imlib_image_get_data();   

В моем C-коде, с помощью библиотеки IMLIB2 с API http: //docs.enlightEnment.org/api/imlib2/html/imlib2_8c.html#17817446139A645CC017E9F79124E5A2

Английский оригинал

I'm using JNI to obtain raw image data in the following format:

The image data is returned in the format of a DATA32 (32 bits) per pixel in a linear array ordered from the top left of the image to the bottom right going from left to right each line. Each pixel has the upper 8 bits as the alpha channel and the lower 8 bits are the blue channel - so a pixel's bits are ARGB (from most to least significant, 8 bits per channel). You must put the data back at some point.

The DATA32 format is essentially an unsigned int in C.

So I obtain an int[] array and then try to create a Buffered Image out of it by

        int w = 1920;         int h = 1200;          BufferedImage b = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);            int[] f = (new Capture()).capture();         for(int i = 0; i < f.length; i++){;                 b.setRGB(x, y, f[i]);         } 

f is the array with the pixel data.

According to the Java documentation this should work since BufferedImage.TYPE_INT_ARGB is:

Represents an image with 8-bit RGBA color components packed into integer pixels. The image has a DirectColorModel with alpha. The color data in this image is considered not to be premultiplied with alpha. When this type is used as the imageType argument to a BufferedImage constructor, the created image is consistent with images created in the JDK1.1 and earlier releases.

Unless by 8-bit RGBA, them mean that all components added together are encoded in 8bits? But this is impossible.

This code does work, but the image that is produced is not at all like the image that it should produce. There are tonnes of artifacts. Can anyone see something obviously wrong in here?

Note I obtain my pixel data with

imlib_context_set_image(im); data = imlib_image_get_data(); 

in my C code, using the library imlib2 with api http://docs.enlightenment.org/api/imlib2/html/imlib2_8c.html#17817446139a645cc017e9f79124e5a2

</div
     

Список ответов

0
 
vote
vote
Лучший ответ
 
<Р> я идиотка. <Р> Это просто ошибка. <Р> я забыл включить как я вычислить х, у выше. <Р> В основном я использую
 <код>  int x = i%w;  int y = i/h;   
<Р> в течение цикла, который является неправильным. Должно быть
 <код>  int x = i%w;  int y = i/w;   
<Р> Не могу поверить, что я сделал эту глупую ошибку.
 

i'm an idiot.

This is merely a bug.

I forgot to include how I calculate x,y above.

Basically I was using

 int x = i%w;  int y = i/h; 

in the for loop, which is wrong. SHould be

 int x = i%w;  int y = i/w; 

Can't believe I made this stupid mistake.

</div
 
 

Связанный проблема

1  Как конвертировать сенсорный экран RAW X и RAW Y на Android  ( How to convert touchscreen raw x and raw y on android ) 
Я пишу C код для чтения / dev / input / event0, а затем я прочитал Rawx и Rawy, Но в деятельности Ontouch функция, я получаю X и Y, они не равны Rawx и Rawy. ...

0  Нативная библиотека для загрузчика Tomcat Bootstrap  ( Native library for tomcat bootstrap loader ) 
Я инструментировал java.lang.system с пользовательским методом, который вызывает какой-то нативный код. Я использую Bootclasspath, чтобы этот класс был найден...

2  Стоит ли реализовать код C ++ через JNI в этом приложении?  ( Is it worth implementing c code through jni in this application ) 
Я разрабатываю серверное приложение, и хотел бы использовать гибкость и (возможно) скорость Увеличение C ++ может предложить, реализуя сетевой код в C ++. Одн...

0  Обмен памяти с нативным приложением Android  ( Sharing memory with android native app ) 
Я пытаюсь создать общую область памяти следующим образом: <код> JNIEXPORT jlong JNICALL Java_com_test_Native_getShortBuffer(JNIEnv* env, jobject thiz, j...

5  AutoConf Test для JNI включает  ( Autoconf test for jni include dir ) 
Я работаю над сценарием конфигурации для оболочки JNI. Одной из параметров конфигурации является путь к <код> <span class="my-date">2015-06-04T13:00:00</span>...

2  Android JNI AttachcurrentThread утечки Java Thread  ( Android jni attachcurrentthread leaks java thread ) 
Мое приложение делает несколько вызовов от родных потоков в Java, я вижу, что использование памяти приложение медленно ползут. Похоже, звонки, чтобы прикрепит...

2  JNI CrashLog: Определение линейки файла исходного файла с выходом Stacktrace  ( Jni crashlog source file line determination with stacktrace output ) 
аварии и усилитель; Раздел ANR Консоль разработчиков Google Play предоставляет этот вид обратной связи, когда нативный код вылетает на устройстве пользователя...

1  fdopen не работает  ( Fdopen not working ) 
Наличие проблем, открывающихся и fdopen на работу, код: <код> LOGI("opened %s", strerror( errno )); int handle= open("/mnt/sdcard/license.rar",O_RDO...

3  Лучший способ построить комплексные родные + Java-библиотеки с Android SDK + NDK  ( Best way to build complex native java libraries with android sdkndk ) 
Я строю многоплатформенный SDK для трехмерных приложений в реальном времени. Этот SDK запрограммирован в C ++ и работает под Windows, iOS Apple, MacOS, Linux ...

13  JNI Action / Deatach Memory Memory Management  ( Jni attach detach thread memory management ) 
У меня есть обратный вызов JNI: <код> <xsd:sequence> <xsd:element minOccurs="0" name="DataList" nillable="true" type="ns:tDataValues"/> </xsd:sequence> 0 ...

0  Передать ansi String из Java до C ++ (JNI)  ( Pass ansi string from java to c jni ) 
У меня есть файл с арабским контентом (закодирован в ANSI). Я написал код C ++, ответственный за обработку этого текста. Теперь я хочу передать этот текст от...

6  Упаковка библиотек JNI [дубликат]  ( Packaging jni libraries ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

0  JNI делает файл не работает. Несколько определений  ( Jni make file is not working multiple definitions ) 
<Р> Так что я пытаюсь сделать JNI библиотеку, но файл сделает дает странную ошибку, что я действительно не понимаю. <код> /tmp/ccPWlMuy.o: In function `Java_...

19  libusb_open_device_with_vid_pid не удалось при попытке получить доступ к устройству USB  ( Libusb open device with vid pid failed when trying to access usb device ) 
Я пытаюсь получить USB-устройство для подключения к устройству Android 5.1.1. Ранее я использовал обычный Libusb для Kitkat, но Lollipop имеет повышенную безо...

0  Ошибка компиляции при вызове метода OpenCV  ( Compilation error while calling opencv method ) 
Я получаю адрес объекта Mat OpenCV в долгосрочной перспективе. После инициализации объекта я хочу вызвать следующий метод <код> Mat::Mat(const Mat& m, cons...