Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание BMP файла из массива байтов, нужно другое решение. 
V
    Опции темы
bougle
  Дата 2.5.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2006
Где: Хабаровск

Репутация: нет
Всего: нет



Из сети принимается массив байтов. 152х200 точек 8-битного серого изображения. Нужно сохранить его в формате BMP
Мое решение:
Так как массив полностью идентичен растру BMP файла, то просто добавляю к нему заголовок BMP.
Код

                FileInputStream meta = new FileInputStream("meta.dat");
                FileInputStream raster = new FileInputStream("raster.dat");
                File fing = new File("C:/finger.bmp");
                RandomAccessFile finger = new RandomAccessFile(fing,"rw");
                byte [] armeta = new byte[1078];
                byte [] arraster =new byte[30400];
                meta.read(armeta);
                raster.read(arraster);
                finger.write(armeta);
                finger.write(arraster);

meta.dat - Сохраненный заголовок для BMP файла такого формата.
raster.dat - Сохраненный битмап.
finger.bmp - Полученный BMP файл.
А как это сделать средствами  java. Для создания объекта BufferedImage нужен объект WritableRaster. А как его создать из массива байтов?    
Код

setDataElements(int x, int y, int w, int h, Object inData)

Sets the data for a rectangle of pixels from a primitive array of type TransferType.
В качестве Object inData можно поставить массив?
  

Это сообщение отредактировал(а) bougle - 2.5.2006, 15:46
PM MAIL   Вверх
LSD
Дата 2.5.2006, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Если у тебя уже есть заголовок, пиши в файл вначале его а затем дописывай байты с картинкой и все, в чем трудности? Зачем тебе нужно создавать BufferedImage из массива байт? 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
polosatij
Дата 3.5.2006, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 1
Всего: 8



можно сделать так:

Код

com.sun.image.codec.jpeg.JPEGImageEncoder
com.sun.image.codec.jpeg.JPEGCodec
//Hilfsklassen: java.awt.image.BufferedImage, java.awt.Graphics2D
//Codebeispiel:
Image img;
... // Das Bild wird erzeugt und manipuliert, z.B. über
// Filter, oder auch über ein Graphics-Objekt (!)
// Annahme: Die Pixeldaten seien bereits vollständig erzeugt
// Festlegen des Dateinamens:
FileOutputStream out = new FileOutputStream("MeinNeuesBild.jpg");
// Erzeugen des JPEG-Encoders für diesen OutputStream:
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
// Kopieren des Bildes in ein BufferedImage:
BufferedImage bImg = new BufferedImage(breite, höhe, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bImg.createGraphics();
g.drawImage(img, null, null); // Annahme: Kein ImageObserver mehr nötig
// Kodieren:
encoder.encode(bImg);
out.close();



и потом поменять ассоциацию на .bmp smile

с помощью:
Код

ImageProducer prod =
new MemoryImageSource(breite, höhe, pixels, 0, breite);


можно создать Image и нарисовать его в BufferedImage
pixels = это int[], т.е. то, что у тебя уже есть =)

удачи smile 


--------------------
PM   Вверх
bougle
Дата 4.5.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2006
Где: Хабаровск

Репутация: нет
Всего: нет



polosatij, извини, не понятно. Оставлю как есть.
Сегодня тестировали датчик. Приняли таки отпечаток пальца. Только вот на нем было некоторое количество малинового цвета. Мы с коллегой не поняли почему в картинке, которая должна быть серой по определению, появился цвет. К сожалению диска под рукой не оказалось и я сейчас не могу в спокойной обстановке рассмотреть файл.
Сейчас вспомнил, что прозрачный цвет может отображаться малиновым. Никто не помнит, в стандартной палитре 8-битного серого BMP точка прозрачного цвета равена 255?
*Ушел юзать поиск*
smile  
PM MAIL   Вверх
LSD
Дата 5.5.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



BMP не поддерживает прозрачность, ни в каком виде. Если только программа просмотра так себя ведет, например считая цвет верхнего левого угла прозрачным (так ведет себя Delphi).  


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
bougle
Дата 6.5.2006, 05:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2006
Где: Хабаровск

Репутация: нет
Всего: нет



Точно, поюзал поиск. Дело оказалось в другом. Просто я заголовок отрезал от существующего 256-цветного BMP файла. Файл то был не серый, а цветной. Вот и все чудеса.
Сейчас пытался найти, как выглядит палитра 256-цветного серого BMP, но не могу найти даже на msdn. Не подскажете, как содать такую палитру? Или как создать такой BMP файл, а заголовок я вырежу для использования.
 
PM MAIL   Вверх
LSD
Дата 7.5.2006, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(bougle @  6.5.2006,  06:11 Найти цитируемый пост)
как создать такой BMP файл

Можно в фотошопе, New Image - Grayscale, 8 bit


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
bougle
Дата 8.5.2006, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2006
Где: Хабаровск

Репутация: нет
Всего: нет



У меня 6-ой фотошоп. Он с BMP отказывается работать.
Ладно, вот так выглядит изображение.
http://bougle.narod.ru/COMBM0.jpg

Только вот возникла проблема, что с датчика подключаемого через модем идут нереверсированные данные. В итоге изображение выглядит вот так:
http://bougle.narod.ru/UDPimage7.jpg
Сейчас создам тему про реверсию битов, это отдельный разговор. 
PM MAIL   Вверх
LSD
Дата 8.5.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(bougle @  8.5.2006,  03:26 Найти цитируемый пост)
У меня 6-ой фотошоп. Он с BMP отказывается работать.

Ну тогда так:
Код
BufferedImage grayscaleImage = new BufferedImage(256, 256, BufferedImage.TYPE_BYTE_GRAY);
ImageIO.write(grayscaleImage, "BMP", new File("gray.bmp"));
 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
bougle
Дата 9.5.2006, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.4.2006
Где: Хабаровск

Репутация: нет
Всего: нет



Угумс, я тоже об этом подумал, но сделал почему не так. Скачал ACDSee 3.1. Точно помнил, что она в 256 градаций серого BMP сохраняет.
Какой-то у меня подход не програмерский. 

Всем спасибо за помощь! Надеюсь скоро сам буду писать ответы в помощь smile  

Это сообщение отредактировал(а) bougle - 9.5.2006, 03:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1079 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.