Я конвертирую приложение C++ Win32 в Java (в Linux) Мне нужно прочитать BITMAPFILEHEADER и BITMAPINFOHEADER растрового изображения, как я могу это сделать? Я нахожу библиотеку jna (java native access), которая специализируется на окнах (я думаю). Есть ли у кого-нибудь идеи?Чтение BITMAPFILEHEADER и BITMAPINFOHEADER из BitMap
0
A
ответ
0
После поиска в Интернете я решил реализовать эти Структуры от моей личности и прочитать файл растрового изображения в массив байт и анализировать их элементы данных класса, вот код
public class BitmapFileHeader {
char[] bfType;
int bfSize;
short bfReserved1;
short bfReserved2;
int bfOffBits;
private BitmapFileHeader() {
}
public static BitmapFileHeader readFromImage(byte[] image) {
BitmapFileHeader bitmap = new BitmapFileHeader();
bitmap.bfType = new char[2];
int index = 0;
bitmap.bfType[0] = (char) image[index++];
bitmap.bfType[1] = (char) image[index++];
bitmap.bfSize = (image[index + 3] & 0xff) << 24 | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8
| (image[index + 0] & 0xFF);
index += 4;
bitmap.bfReserved1 = (short) (((image[index + 1] & 0xFF) << 8) | (image[index + 0] & 0xFF));
index += 2;
bitmap.bfReserved2 = (short) (((image[index + 1] & 0xFF) << 8) | (image[index + 0] & 0xFF));
index += 2;
bitmap.bfOffBits = (image[index + 3] & 0xff) << 24 | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8
| (image[index + 0] & 0xFF);
return bitmap;
}
}
public class BitmapInfoHeader {
int biSize;
long biWidth;
long biHeight;
short biPlanes;
short biBitCount;
int biCompression;
int biSizeImage;
long biXPelsPerMeter;
long biYPelsPerMeter;
int biClrUsed;
int biClrImportant;
private BitmapInfoHeader() {
}
public static BitmapInfoHeader readFromImage(byte[] image) {
BitmapInfoHeader bitmap = new BitmapInfoHeader();
// LittleEndian order ...
int index = 14;
bitmap.biSize = (image[index + 3] & 0xff) << 24 | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8
| (image[index + 0] & 0xFF);
index += 4;
bitmap.biWidth = ((image[index + 3] & 0xff) << 24) | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8
| (image[index + 0] & 0xFF);
index += 4;
bitmap.biHeight = (image[index + 3] & 0xff) << 24 | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8
| (image[index + 0] & 0xFF);
index += 4;
bitmap.biPlanes = (short) (((image[index + 1] & 0xFF) << 8) | (image[index + 0] & 0xFF));
index += 2;
bitmap.biBitCount = (short) (((image[index + 1] & 0xFF) << 8) | (image[index + 0] & 0xFF));
index += 2;
bitmap.biCompression = (image[index + 3] & 0xff) << 24 | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8
| (image[index + 0] & 0xFF);
index += 4;
bitmap.biSizeImage = (image[index + 3] & 0xff) << 24 | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8
| (image[index + 0] & 0xFF);
index += 4;
bitmap.biXPelsPerMeter =
// ByteBuffer.wrap(image, index, index +
// 4).order(ByteOrder.LITTLE_ENDIAN).getLong();
(int) (image[index + 3] & 0xff) << 24 | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8 | (image[index + 0] & 0xFF);
index += 4;
bitmap.biYPelsPerMeter =
//ByteBuffer.wrap(image, index, index + 4).order(ByteOrder.LITTLE_ENDIAN).getLong();
(int) (image[index + 3] & 0xff) << 24 | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8 | (image[index + 0] & 0xFF);
index += 4;
bitmap.biClrUsed = (image[index + 3] & 0xff) << 24 | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8
| (image[index + 0] & 0xFF);
index += 4;
bitmap.biClrImportant = (image[index + 3] & 0xff) << 24 | (image[index + 2] & 0xFF) << 16 | (image[index + 1] & 0xFF) << 8
| (image[index + 0] & 0xFF);
index += 4;
index += 10;
return bitmap;
}
}
Смежные вопросы
- 1. Bitmap loader C++
- 2. чтение файла .bmp в C++
- 3. Bitmap is null чтение из файла
- 4. BITMAPFILEHEADER не связан?
- 5. Чтение массива байтов в bitmap
- 6. Есть ли способ сохранить BITMAPFILEHEADER при загрузке Bitmap в качестве ресурса Windows?
- 7. BITMAPFILEHEADER эквивалент в c/C++?
- 8. Как создать файл bmp из байта [] в C#
- 9. Bitmap to char * проблемы win32
- 10. Как получить BITMAPINFOHEADER с изображения OpenCV?
- 11. C++ bitmap edit
- 12. Вычисление BITMAPINFOHEADER biCompression для монохромного BMP
- 13. C# Bitmap Чтение неправильного цвета с пикселя
- 14. Чтение и запись непосредственно в Unlocked Bitmap неуправляемой памяти (Scan0)
- 15. Преобразование Windows Bitmap в PIX (без знака буфера полукокса)
- 16. Canvas bitmap в массив байтов и чтение его проблемы
- 17. Чтение и запись из очереди
- 18. Загрузка Bitmap из ExternalStorage
- 19. Deserialize Bitmap из архива
- 20. Bitmap из URL Android
- 21. Bitmap - Исключение из памяти
- 22. CreateIcon из Gdiplus :: Bitmap
- 23. Из выпуска Bitmap памяти
- 24. Ошибка Bitmap - параметр недействителен и из памяти
- 25. Мышь курсора bitmap
- 26. C++ Общий метод для записи вектора пикселей в формате BMP
- 27. Bitmap bitmap = BitmapFactory.decodeResource (this.getResources(), R.drawable.picture1
- 28. HBITMAP * Bitmap to .net Bitmap
- 29. чтение файла .bmp C++, неправильные значения?
- 30. Bitmap lockbits и клонирование