![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как записать в файл рисунок? [D7, WinXP]
VAmpiro$ © (2004-09-21 02:07:00)Как записать в файл рисунок?
Есть к примеру переменные:
Var
st:String[10];
intA:array [1..100] of integer;
как м мне их записать в файл с какимто рисунком...
к примеру: которий сидит на TImage?
Defunct (2004-09-26 01:26:00) [1]хм. тогда, советую посмотреть на структуру EML файла с вложением и сделеть нечто подобное.
допустип формат файла следующий:
- Заголовок (который включает кол-во полигонов и кол-во текстур)
- Полигоны подряд
- Текстуры подряд
где заголовок, например, такой:
T3DFileHeader = packed Record
PolygonCount : Integer;
TexturesCount : Integer;
CheckSum : Integer;
End;
Полигоны состоят из точек и имеют какое-то свойство:
T3dPoint = packed Record
X,Y,Z : Single;
End;
TPolygon = packed Record
Points : Array[1..3] of T3dPoint;
PolygonProperty : Byte;
End;
Текстуры сохранять из Bitmap'ов в стрим, а потом дописывать к файлу так: вначале объем битмапа, потом сам битмап.
VAmpiro$ (2004-09-26 00:54:00) [2]
> тогда все очень просто, храните структуры отдельно от текстур
> и все будет "тип-топ"
мне удобнее иметь под рукой текстуры, так мне с ниме в моем редакторе легче будет работать
Defunct (2004-09-25 01:08:00) [3]угу теперь понятно, т.е. строится файл структуры, а не изображения.
тогда все очень просто, храните структуры отдельно от текстур и все будет "тип-топ"
VAmpiro$ (2004-09-25 00:56:00) [4]type
NProperty=(Visible,Extern,Discord);
Я подучиваю Open GL, толко начинаю...
и хочю создать файл который бубет в себе содержать
координаты точек 3D oбектов, и текстуры к ним..
что-то на подобе файлов *.mdl (Half-Life) {Ну там еще есть координаты и параметры скилета модели, не это не важно}
File=record
Position:Array[1..255,1..3] of Single;//коорднаты точек трехмерных обектов
Property:array[1..255] of NProperty;// свойства точек
Count:byte;// Кол-во точек
{Какой скрипт мне сюда еще нужно добавить для записи массива с "Bitmap'ов"}
end;
надеюс теперь то все понятно?!?!?
Erik1 (2004-09-23 16:26:00) [5]Ну еще можно заголовок сделать куда записать сколько их, откуда у нас начинаются BitMaps, соответственно все смещения незабыть или абсолютные позиции. После в загоровке записать позицию начала record - File. А есть такой зверь как структурированые хранилища, разработка своего компонента очень изящное решение он может писать себя в поток, правда придется разбтратся с TWriter TRiader. Но кому сейчас легко?
sniknik (2004-09-23 15:48:00) [6]> {ЧТО МНЕ ЕЩЕ СУДА НУЖНО ВПИСАТЬ ЧТО-БЫ В ФАЙЛЕ МОЖНО БЫЛО СОХРАНИТЬ МАСИВ Array[1..32] Bitmap'ов }
конкретно сюда ничего, чего ни пиши толку не будет.
можно конечно придумать исключения, типа, что битмапы все исключительно одинаковой длинны, тогда можно расчитать размер и вставить как есть масив из байтов, куда и сохранять значение битмапа.
а не указатель.
как это сделать я тебе не скажу (просто лень долго и нудно обьясьнять), подсказку дам... положи на форму компонент timage, в него закачай рисунок(чтобы отобразился), а после правой кнопкой мыши на форме и жми view as text, попадеш в dfm модуль иши там timage и смотри что в данных (а это твой рисунок и есть).
сложно сделать такой же массив? делай. придумывай как с разными размерами быть и т.д.
Defunct (2004-09-23 14:51:00) [7]> файл то я могу уже давно умею создавать!
Ваши вопросы показывают обратное.
вот в чем дело!
имеются координаты точек,их количество, и еще некоторие параметры:
type
NProperty=(Visible,Extern,Discord);
File=record
Position:Array[1..255,1..3] of Single;
Property:array[1..255] of NNProperty;
{ЧТО МНЕ ЕЩЕ СУДА НУЖНО ВПИСАТЬ ЧТО-БЫ В ФАЙЛЕ МОЖНО БЫЛО СОХРАНИТЬ МАСИВ Array[1..32] Bitmap'ов }
end;
Покажите в каком месте здесь координаты точек и где же их количество? Вы думаете все понятно что такое Position of Single?
или NNProperty - стандартный тип?
Обычно для сохранения изображения, достаточно задаться шириной и высотой рисунка в точках, а далее просто записать цвет всех точек.
> Не пишите в пустую а дайте полезний совет.Полезный совет:
Не пишите бессмыслицу в пустую, на которую никто не может ответить.
Сформулируйте нормально ваш вопрос, например так:
"Я хочу сделать то-то и то-то, делал так-то и так-то, но ничего не выходит потому что появляются такие-то ошибки компилятора и такие-то ошибки в RunTime."
Amoeba (2004-09-23 12:33:00) [8]У автора вопроса явно в голове полнейшая каша. Если бы он сперва как следует засел за учебник, то и таких вопросов, как заданный им не возникало.
VAmpiro$ (2004-09-23 12:28:00) [9]
> sniknik © (23.09.04 08:40) [7]
> http://www.delphimaster.ru/cgi-bin/forum.pl?n=3&id=1095717751&p=2
> чего человеку надо, так это книга про программирование и
> желание ее изучат. (и это искренне не для издевки)
>
> ведь нужно элементарные вещи, файлы создать, а от незнания
> пишет так что можно понять что нужно чтото особо извратное,
> что так просто и не сделаеш.
>
> p.s. данные после рисунка в файле *.bmp должны игнорироваться
> насколько понимаю, и откроется такой где угодно. можно и
> так, прятать их по условию же не нужно. можно от этого "плясать".
файл то я могу уже давно умею создавать!
вот в чем дело!
имеются координаты точек,их количество, и еще некоторие параметры:
type
NProperty=(Visible,Extern,Discord);
File=record
Position:Array[1..255,1..3] of Single;
Property:array[1..255] of NNProperty;
{ЧТО МНЕ ЕЩЕ СУДА НУЖНО ВПИСАТЬ ЧТО-БЫ В ФАЙЛЕ МОЖНО БЫЛО СОХРАНИТЬ МАСИВ Array[1..32] Bitmap'ов }
end;
Не пишите в пустую а дайте полезний совет.
Anatoly Podgoretsky (2004-09-23 08:48:00) [10]Учись формулировать мысли
sniknik (2004-09-23 08:40:00) [11]http://www.delphimaster.ru/cgi-bin/forum.pl?n=3&id=1095717751&p=2
чего человеку надо, так это книга про программирование и желание ее изучат. (и это искренне не для издевки)
ведь нужно элементарные вещи, файлы создать, а от незнания пишет так что можно понять что нужно чтото особо извратное, что так просто и не сделаеш.
p.s. данные после рисунка в файле *.bmp должны игнорироваться насколько понимаю, и откроется такой где угодно. можно и так, прятать их по условию же не нужно. можно от этого "плясать".
Defunct (2004-09-23 01:48:00) [12]Константинов © (23.09.04 01:35) [5]
ну во-первых "слушу звон да не знаю откуда он" не 1 бит сохраняется, а M bit где M<N, N - число бит на канал. Алгоритм сокращения объема за счет урезания качества. Но есть более продвинутые алгоритмы причем, молчу про JPG достаточно взять PCX (сокращение объема рисунка с сохранением качества) - цепочка точек с одинаковым цветом кодируется как: Record (Цвет, Количество точек)
во-вторых 3 бита на точку дадут нам всего 8 цветов, и уж поверьте на глаз изменение качества будет очень сильно заметно.
в-третьих младший бит, как правило, наименее значащий. Именно он менее всего влияет на цвет и его изменение наименее заметно для глаза. Вы говорите что сохраняется именно он, это все равно что результирующий цвет генерировать функцией Random.
в-четвертых ваш постинг ну никак не вяжется с вопросом, как впрочем и мой.
Константинов (2004-09-23 01:35:00) [13]Краем уха слышал про алгоритм, который использует для записи данных в битовую матрицу самый младший бит состовляющих цвета ( R,G,B ) на глаз изменение цвета не заметно, а вот в каждом пикселе рисунка по 3 бита сохранить можно запросто.
Defunct (2004-09-23 01:20:00) [14]VAmpiro$ (23.09.04 01:08) [3]
такой файл создать нельзя, потому что при создании файл будет пустым.
VAmpiro$ (2004-09-23 01:08:00) [15]Нузно создать файл
который содержит
A1: array[1..255] of Single;
P1: array[1..255,1..3] of Single;
Count: byte;
и еще рисунок, ну пусть Bitmap
_ALEXey_ (2004-09-21 10:39:00) [16]Усли я правильно понял о чем речь, то почитай про стеганографию.
GuAV (2004-09-21 02:46:00) [17]чтобы "запихнуть" переменные в файл используются либо процедуры для работы с файлами Delphi (Write, BlockWrite..), WinAPi (WriteFile ...) либо обёртками файла типа TFileStream.
Рисунок сохранить методом SaveToFile.
записать дополнительные переменные в файл с рисунком BMP, не изменив его данных и не нарушив его структуры невозможно, т.к. в структуре BMP несто для дополнительных данных не предусмотрено.