хоть и в ГМе есть функции по сохранению изображений, хотелось бы написать свою. считывать из бмп получалось, да это и не сложно: прочитать размеры и с 54 бита пока файл не кончится читать тройки байтов на цвета. а вот с сохранениями в БМП уже проблемы. я делал так: читал всё до 54 байта рабочей(сделанной пейнтнетом) БМП, сохранил в массив. потом создал новый файл, записал туда весь этот массив(т.е. скопировал заголовок файла), записал цветовые тройки байтов для каждого пиксела (пикселы брал с участка экрана драу_гетпиксел'ом). разрешение моей картинки не такое, как у исходной, так что потом я заменил участки заголовка, отвечающие за размер файла и разрешеня. вроде всё ок. аннет! прочитать получившееся "БМП" получалось ТОЛЬКО у ГМа, все остальные проги отказывались, типа "файл повреждён" и т.д.
может кто уже работал с БМПшками и поможет, а то я его ковырял-ковырял, да так и не понял, что не так...
З.Ы.: читал полученный БМП только ГМ - в смысле МОЯ программа, сделанная на ГМе.
Сообщение отредактировал 3bl3gamer - Среда, 16.12.2009, 21:59
Я конечно извиняюсь, но зачем изобретать гибрид верблюда с паровозом? Ведь есть же в ГМ функции для сохранения сурфейса или куска экрана напрямую в бмп, и нормально они работают. Что-то вроде surface_save.
3bl3gamer, я хоть и не знаток в этом деле, но попробуй по разбирать заголовки разных БМП-шек, там наверняка есть что-то типа суммы пикселей или хеш-суммы для проверки целостности файла. Я думаю тут "собака зарыта".
Добавлено (16.12.2009, 22:46) --------------------------------------------- Вот посмотри тут:
BMP формат разрабатывался для OS Windows и широко в ней применяется, но он был разработан как кросплатформенный формат и у него есть для этого все необходимые атрибуты. Заголовок BMP-файла состоит из 2х частей, собственно заголовка "FILE HEADER" и информационной части "INFORMATION HEADER". Описание всего этого хозяйства приведено ниже:
FILE HEADER
BM signature (2 bytes) = "BM" - заголовок (BitMap) File size (4 bytes) - это размер самого файла в байтах. Reserved (2 bytes) – зарезервировано, должно быть(0х00 0х00). Reserved (2 bytes) – зарезервировано, должно быть(0х00 0х00). Location of bitmap data (4 bytes) - показывает, где начинается сам битовый массив относительно начала файла
INFORMATION HEADER
Size of information header (4 bytes) = 40 (0х28) – размер информационного заголовка в байтах Image width (4 bytes) - ширина изображения в пикселах Image height (4 bytes) - высота изображения в пикселах Number of color planes (2 bytes) - количество плоскостей (пока всегда = 1 (0х00 01) ). Number of bits per pixel (2 bytes) – кол - во бит на пиксель Compression method used (4 bytes) – тип сжатия ( = BI_RGB ( без сжатия )… Number of bytes of bitmap data (4 bytes) – размер изображения в байтах (0 – если BI_RGB) Horizontal screen resolution (4 bytes) – кол-во пикселей на метр по горизонтали (не обязательно на экране) Vertical screen resolution (4 bytes) – кол-во пикселей на метр по вертикали (не обязательно на экране) Number of colors used in the image (4 bytes) – 0 = максимально возможное количество цветов Number of important colors (4 bytes) – 0 = все цвета важные
Location of bitmap data (4 bytes) - показывает, где начинается сам битовый массив относительно начала файла
а! вот в чём вся хрень была! просто на дом сайте, на котором я смотрел, значение по умолчанию для этой позиции было написано (1076 где-то), ну, я его и вписал. ща написал вместо него 54, всё, терь ок! спасибо, ща пример выложу чтоль... чтоб было.
хм. странно... FIXMAX, судя по твоей описаловке и ещё одной на другом сайте, размер заголовка БМП постоянный (54 байта). я ща для интересу сохранил фотошопом 4-х битный чёрно-белый БМП. поробовал прочитать. вроде прочиталось, только почему-то всё сдвинуто немного вниз было, и начиналось с какой-то билибурды. я проверил записанный в файле размер заголовка (10-13 байты), и правда! он терь не 54, а 118 стал. это что ж такого фотошоп туда написал, а главное - зачем?!