forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   Свой формат изображения. (http://forum.boolean.name/showthread.php?t=13573)

Ganociy 24.10.2010 17:20

Свой формат изображения.
 
Как, допустим из *.bmp в свой *.dft, перевести изображение. Т.е. чтоб ни пеинты и фотошопы не понималь твой формат, а толька твоя прога читала картинку.

Nex 24.10.2010 17:26

Ответ: Свой формат изображения.
 
Сделать свой формат изображений...

impersonalis 24.10.2010 17:29

Ответ: Свой формат изображения.
 
ну и вопрос: чтобы пеинты не понимали, достаточно в заголовке один байт изменить, что, однако, не помешает провдинутым вьюверам (типо IrFan) запалить подмену и проинформироровать пользователя. Вопрос можно аналогично перенсти на етственную речь: как писать на фоурме так, чтобы юзеры всякие не понимали? Да как угодно: хоть роаывлпор, хоть 378 391 010

den 24.10.2010 20:09

Ответ: Свой формат изображения.
 
ну надо придумать свой алгоритм:
1) сначало с нормального изображения читаеш пиксели, 1px = 3 байта (по байту для каждой цветовой компоненты)
2) пото м уже как ты пожелаеш делаеш запутанный алгоритм: типо первый бит меняеш на последний, из серединый берёш байт вставляеш на 15 позицию, ну в том же духе.
3) если хватит ума - можно сделаьть сжатие - тоесть сильное уменьшение изображение - но зато немного в качестве потеряеш.
4) записываеш всё это дело в файл.

это только запись. Чтение тоже самое, только наоборот.

impersonalis 24.10.2010 20:20

Ответ: Свой формат изображения.
 
Цитата:

1) сначало с нормального изображения читаеш пиксели, 1px = 3 байта (по байту для каждой цветовой компоненты)
вообще говоря - нет
Цитата:

3) если хватит ума - можно сделаьть сжатие - тоесть сильное уменьшение изображение - но зато немного в качестве потеряеш.
вообще говоря - нет

JACUK 24.10.2010 20:31

Ответ: Свой формат изображения.
 
Можно к примеру записать в файл координаты точки, потом

den 24.10.2010 21:12

Ответ: Свой формат изображения.
 
Цитата:

Сообщение от JACUK (Сообщение 165859)
Можно к примеру записать в файл координаты точки, потом

захрена, этож дохера весить будет. Достаточно гденибуть записать размеры изображения, и делать двойной вложеный for и читать/записывать точки по их цветам

JACUK 24.10.2010 21:36

Ответ: Свой формат изображения.
 
Можно и так.

ABTOMAT 24.10.2010 21:56

Ответ: Свой формат изображения.
 
Цитата:

Как, допустим из *.bmp в свой *.dft, перевести изображение. Т.е. чтоб ни пеинты и фотошопы не понималь твой формат, а толька твоя прога читала картинку.
1. Подумать каким образом будет записана информация о цвете пикселей изображения.
2. Подумать как это оптимизировать (группировать пикселы по цвету, как в PNG или, может, сделать цветовую таблицу (например, 256 цветов), чтобы на запись одного пиксела уходило меньше информации, или почитать про jpeg-сжатие и сделать что-то по типу, а можно и тупо по 3 байта на пиксель писать - вариантов масса)
3. Написать программу, которая будет записывать и читать твой формат (возможно, конвертить из других форматов).
Либо взять уже готовый формат и немного поменять его, чтобы обычные просмотрщики не отображали его корректно (если это единственная цель) - тогда переходим сразу к пункту 3. Впрочем, Импер написал полнее.

Вот скажи, что из вышеперечисленного для тебя не очевидно?
Ничего конкретнее (кода и т.д.) никто не даст, потому что не ясно назначение формата, что там будет храниться, будет ли он сжимать изображение, с потерями или без и т.д.
Вопрос сродни "Как сделать игру?"
Ответ - сесть и подумать конкретнее что именно нужно.
Если после уточнения требований не появится более точный ответ - ещё уточнять всё (вплоть до написания документации по будущему формату, где были бы описаны каждые мелочи) После этого обычно вопросов вообще не остаётся (если человек знаком с программированием)
Вопрос из первого поста тупой по определению.
А потом люди удивляются, почему им в ответ грубят или стебутся. Булко-стал? Нет. Просто какой вопрос - такой и ответ.

Ganociy 25.10.2010 20:42

Ответ: Свой формат изображения.
 
Хорошо. Тогда кто - нибудь может подсказать как читать байт графического изображения и сохранять его. А?

ViNT 25.10.2010 21:11

Ответ: Свой формат изображения.
 
Цитата:

Сообщение от Ganociy (Сообщение 165997)
Хорошо. Тогда кто - нибудь может подсказать как читать байт графического изображения и сохранять его. А?

Проще всего загрузить изображение в TBitMap и читать пиксели из него через свойство BitMap.Canvas.Pixels[x,y];.
Читаем пиксель, обрабатываем его, результат записываем в свой файл, используя TFileStream. Проще некуда.

moka 25.10.2010 21:59

Ответ: Свой формат изображения.
 
А не проще выбрать хороший формат, и просто его кодировать?
Например перебрать все байты по алгоритму Rijndael?

JACUK 25.10.2010 22:12

Ответ: Свой формат изображения.
 
А как записать цвет в файл с помощью BlockWrite? и считать с помощью BlockRead

moka 25.10.2010 22:15

Ответ: Свой формат изображения.
 
http://www.delphibasics.co.uk/RTL.asp?Name=BlockWrite
?
Цвет это RGB (если без Alpha).
3 канала, каждый использует int (0-255 (unsigned)).

ViNT 25.10.2010 22:39

Ответ: Свой формат изображения.
 
Цитата:

Сообщение от JACUK (Сообщение 166010)
А как записать цвет в файл с помощью BlockWrite? и считать с помощью BlockRead

А зачем BlockRead использовать?
Лучше использовать TFileStream, там есть методы ReadBuffer и WriteBuffer.
Просто пишем
Код:

var
 F:TFileStream;
 C:TColor;

begin
 F:=TFileStream.Create('c:\file.img',fmCreate);
 F.WriteBuffer(C,4);//С - переменная, 4 - размер переменной
end;

А чтобы читать данные прямо из файла, нужно знать формат.
Проще загрузить файл в соответствующий объект (TBitMap, TJPEGImage, TPNGImage(Отдельный пакет)) и читать пиксели с Canvas, если, конечно, речь не идет об очень больших избражениях.


Часовой пояс GMT +4, время: 01:38.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot