Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » [решено] Изображение в коде

Ответить
Настройки темы
[решено] Изображение в коде

Старожил


Сообщения: 160
Благодарности: 0

Профиль | Отправить PM | Цитировать


Каким способом изображение хранится в машинном коде, ну или в 16ричном. Например есть изображение 2х2 пикселя, я открывая НЕХ редактором, и если от панта изменить, открываю вижу что фото или вобще поменялось цвета, а не один пиксель, вобщем вопрос в том, что же и как хранится. Наверное Дата создания, имя. Но код прописан не на каждый цвет пикселя, таки ли это?

Отправлено: 23:11, 17-04-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


xNiSSaNx, изображение хранится не в «машинном коде», и не в «16ричном», а в своём формате: Графические форматы — Википедия. Определяйтесь с конкретным форматом Вашего изображения и затем отсюда «танцуйте».

Есть представление изображения при их использовании приложением, например IPicture interface.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:29, 17-04-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Старожил


Сообщения: 160
Благодарности: 0

Профиль | Отправить PM | Цитировать


Так оно же в НЕХ редакторе открывается. Например .рng

Отправлено: 13:22, 18-04-2012 | #3


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Оно и в блокноте отрывается, вы лучше прочитайте про графические форматы

Отправлено: 14:02, 18-04-2012 | #4


Ветеран


Сообщения: 1405
Благодарности: 135

Профиль | Отправить PM | Цитировать


В ФАЙЛЕ ХРАНИТСЯ КАЖДЫЙ ПИКСЕЛЬ. Как хранится, указывается в заголовке формата.

Если изображение 2x2 на 2 пикселя, то в формате BMP один пиксель будет занимать 4 байта. то есть последовательность 00 00 00 00, по другому называемая DWORD-ом или int-ом или long-ом, где 1 байт это R (red, красный) компонента цвета, 1 байт это G ( green, зеленый) компонента цвета, 1 байт это B ( blue, синяя) компонента цвета. Остаток - нули для выравнивания по определенному размеру, который сможет понять программа, считывающая файл. Каждый пиксель должен хранится в определенном формате, иначе программа не сможет считать файл правильно.

Хранится в битах. Бит принимает значение либо 0, либо 1. Из-за железа компьютера, которое работает на основе двоичной (булевой) логики.

8 бит составляют 1 байт. Набор из 8 битов может принимать значения от 00 до ff шестнадцатеричных. Например, 11111111 это FF при просмотре в 16-ричном редакторе. FF в десятичной системе это 255.


Программа записывает и считывает файл побайтово. В начале файла находится заголовок с описанием формата и различных характеристик файла. Затем непосредственно набор структур, описывающих изображение. Если изображение 2 на 2 пикселя то формат файла это заголовок + набор данных о пикселах.

Анализ структуры:

Например, заголовок BMP

Код: Выделить весь код
typedef struct tagBITMAPFILEHEADER 
{ 
  WORD    bfType;        // смещение 0 от начала файла
  DWORD   bfSize;        // смещение 2 от начала файла, длина 4
  WORD    bfReserved1; 
  WORD    bfReserved2; 
  DWORD   bfOffBits;     // смещение 10 от начала файла, длина 4
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

В шеснадцатеричном виде BYTE это 8 бит, WORD это 16 бит, DWORD это 32 бита.
Структура при записи в файл примет вид: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 где вместо нулей - шестнадцатеричные цифры, которые принимают набор предопределенных программой значений.

Я написал, но сомневаюсь, что без дополнительных вопросов и объяснения, у автора темы будет понимание.

***

Прочитать легко - понять гораздо сложнее, очень трудно. Непонятное обычно пропускается. И чтение без понимания википедии или другого сайта ничего не даст. Лучше бы пытались объяснить своими словами и попроще не программисту. Ссылки на другие сайты без попыток объяснить своими словами так чтобы человек понял, бесполезны. Человек без опыта и подготовки статью о BMP в википедии не поймет, так как понятие DWORD или WORD ему ничего не даст, они являются неизвестными. неизвестность рождает непонимание, непонимание не дает сделать то, что надо. Советы почитать - абсолютно БЕСПОЛЕЗНЫ!!! Нужно объяснять, когда человек спрашивает а не отправлять в гугл, на википедию или на другие сайты. Человек останется в своем одиночестве и ничего не поймет, на форум приходят, чтобы люди отвечали по-людски, а не для того, чтобы их отправляли читать википедию или другие сайты, оставляя однострочные комментарии или приколы. На форуме не камеди клаб.

-------
Ehhh.. what's up, doc?..

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:16, 18-04-2012 | #5


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата mrcnn:
Лучше бы пытались объяснить своими словами и попроще не программисту. Ссылки на другие сайты без попыток объяснить своими словами… »
Всё Вы правильно говорите. Но пока человек не наберёт базовых знаний в той или иной предметной области — от которых он будет отталкиваться при дальнейшем обучении — никакими словами объяснить ему детали Вы не сможете, тем паче, что «свои слова», как правило, будут много хуже выверенных и подобранных слов специалистов своего дела в учебниках и энциклопедиях.

Вот, что мы здесь наблюдаем в первом посте? Незнание тех самых базовых понятий, которые порождают попросту бессмысленную постановку вопроса, на который невозможно дать конкретный ответ как раз по причине его бессмысленности. Это давно известный случай — «Чтобы получить правильный ответ — нужно задать правильный вопрос. Чтобы задать правильный вопрос — нужно знать большую часть ответа.» Плюс ко всему, автор задаёт не конкретный вопрос, а общего характера, без каких-либо деталей. Потому главная задача — задать ему направление, где бы он мог обозреть всю картину в целом, освоиться в данной предметной области, получить тот самый базовый набор знаний, который поможет ему мало-мальски начать ориентироваться и начать задавать правильные вопросы.

Цитата mrcnn:
Нужно объяснять, когда человек спрашивает а не отправлять в гугл, на википедию или на другие сайты. »
Во-первых, в «гугл» автора никто пока не отправлял, поскольку сие рано по изложенным выше причинам. А вот Wikipedia — самое оно. И если:
Цитата mrcnn:
понятие DWORD или WORD ему ничего не даст »
автору не знакомо (несмотря на использование им hex-редактора) — он может просто перейти на соответствующие статьи и узнать, что это такое. Или Вы полагаете, что объяснение: «последовательность 00 00 00 00, по другому называемая DWORD-ом или int-ом или long-ом» действительно лучше объяснения, приведённого в Wikipedia? Ничего, что длина «последовательности» зависит напрямую от глубины цвета, и пиксель в данном формате изображения может быть представлен последовательностью от одного до сорока восьми бит, а?
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:13, 18-04-2012 | #6


Всем до свидания!


Moderator


Сообщения: 8314
Благодарности: 2863

Профиль | Отправить PM | Цитировать


Цитата Iska:
пиксель в данном формате изображения может быть представлен последовательностью от одного до сорока восьми бит, а? »
а при использовании RLE для пикселов разных цветов может отличаться и длина последовательности, для пиксела одного цвета 2 бита, для другого цвета 8 бит

Отправлено: 19:44, 18-04-2012 | #7


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Amigos, именно. И ещё целая куча всяческих тонкостей. И потому мне не очень понятны предубеждения коллеги mrcnn против «почитать учебники».

Отправлено: 22:38, 18-04-2012 | #8


Ветеран


Сообщения: 1405
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата Iska:
Всё Вы правильно говорите. Но пока человек не наберёт базовых знаний в той или иной предметной области — от которых он будет отталкиваться при дальнейшем обучении — никакими словами объяснить ему детали Вы не сможете, тем паче, что «свои слова», как правило, будут много хуже выверенных и подобранных слов специалистов своего дела в учебниках и энциклопедиях. »
В целом во многом я сами согласен. Вы правы в том, что пишете насчет набора базовых знаний.

Однако есть одна проблема: выверенные слова специалистов из учебников и статей очень наукообразные и для понимания нужно объяснять попроще, искать какие-нибудь простые аналогии из разных областей жизни ( из других предметных областей), чтобы объяснение было более доступным. Человек может читать книгу и не понять ее в итоге по причине наукообразности. На форуме же могут объяснить доступно и в этом как мне кажется и есть задача ответов на форуме, где нельзя отсылать по разным местам

Я занимаюсь программированием как хобби примерно 10-11 лет. И простую вещь, что В ФАЙЛЫ ЗАПИСЫАЮТСЯ (например, функцией fwrite языка С) СТРУКТУРЫ (типы данных объявляемые как struct или class в языке C)и СЧИТЫВАТЬ НАДО ТОЖЕ СТРУКТУРЫ (например, функцией fread языка С) я понял лишь на 10-11 году, то есть в этом году, и я постарался на это указать в своем ответе в этом теме. Помимо этого простую вещь, что накладывать на экран, можно область текстуры а не всю текстуру я тоже понял лишь на 10-11 году. Разница между пониманием у новичка, что текстура полностью накладывается и пониманием у специалиста про наложение области существенная. Это подразумевающиеся в статьях, книгах и учебниках вещь и их надо объяснять отдельно, иначе будет непонимание. Новичку надо указывать путь, последовательность важных тем, потому что новичок не сможет выделить главное и второстепенное. И потонет во множестве мелких деталей, а цельной картины мира не будет. Задача обучения и вопросов - составление цельной картины мира, где разные части взаимосвязаны друг с другом. Одна предметная область зависит от другой, то есть все системно взаимосвязано друг с другом. Нужно указывать прямо зачем нужны битовые операции, как работает компьютер, причем не наукообразным языком. 0 в программировании значит, что электрического тока в электрической цепи нет. А 1 значит, что электрический ток в цепи есть. И микропроцессор занимается преобразованием токов внутри самого себя и этим осуществляет арифметические и логические операции. Связь по слотам между устройствами это тоже передача тока по определенному каналам - это простая вещь, но в книгах по прогарммированию не объясняют.

Правильные вопросы у новичка возникают после попыток объяснения. Без попыток объяснения не будет даже самих вопросов - будет просто незнание и непонимание. Человек займется совсем другим делом, а на то, с чем хотел разобраться, забьет, то есть бросит. Нужно ввести и пояснить термины, без них новичок просто бросит, то есть даже не задаст вопросы совсем.

-------
Ehhh.. what's up, doc?..


Последний раз редактировалось mrcnn, 19-04-2012 в 03:43.


Отправлено: 03:32, 19-04-2012 | #9


Старожил


Сообщения: 160
Благодарности: 0

Профиль | Отправить PM | Цитировать


mrcnn все понятно объяснил. Спасибо!

Отправлено: 00:03, 20-04-2012 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » [решено] Изображение в коде

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBA - ошибка в коде noscere Программирование и базы данных 0 05-04-2012 10:49
Разное - Ошыбка в коде Wllladik Программирование и базы данных 1 14-12-2011 02:26
Поясните действия в коде dzheka3d Вебмастеру 2 28-05-2011 02:42
Ошибки в PHP-коде rar864 Вебмастеру 7 06-04-2011 19:03
C/C++ - [решено] Ошибка в простом коде Hector Программирование и базы данных 5 13-10-2010 07:00




 
Переход