Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос для попиксельной заливки картинки в ячейки эксель - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для попиксельной заливки картинки в ячейки эксель (Макросы/Sub)
Макрос для попиксельной заливки картинки в ячейки эксель
Roman777 Дата: Воскресенье, 02.08.2015, 17:21 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Добрый день всем!
Заинтересовался определением цвета пикселя в картинке и нашёл тут: http://www.cyberforum.ru/ms-excel/thread1290906.html
интересный макрос, который заливает попиксельно картинку в ячейки экселя. Вернее сам макрос был нацелен заливать график. Я чуть-чуть подправил (просто побаловаться ради).
В общем сам вопрос. Не пойму как программа работает толком. Не понимаю именно начало, где задаются типы и их свойства (?).
Например:

тут задано Tip, я так понимаю (если правильно вообще понимаю), в программе это в дальнейшем определяется как тип картинки (расширение).
Как программа вообще понимает, что это за свойство объекта?
Или тут:

Largura и Altura свойства объекта(картинки), соответствующие количеству точек (пикселей) по вертикали и по горизонтали.
Это же свойства, которые задал программист. Я не пойму, где происходит объяснение программе, что какое свойство означает. И почему данная программа работает только с bmp форматом... Поясните, пожалуйста, и поправьте меня, где я не прав. Можно на литературку "для чайников" ссылочку... ато вроде читал "кое-что", но видимо голова дырявая, чтот не врубаюсь.
К сообщению приложен файл: 0856629.rar (16.6 Kb)


Много чего не знаю!!!!
 
Ответить
СообщениеДобрый день всем!
Заинтересовался определением цвета пикселя в картинке и нашёл тут: http://www.cyberforum.ru/ms-excel/thread1290906.html
интересный макрос, который заливает попиксельно картинку в ячейки экселя. Вернее сам макрос был нацелен заливать график. Я чуть-чуть подправил (просто побаловаться ради).
В общем сам вопрос. Не пойму как программа работает толком. Не понимаю именно начало, где задаются типы и их свойства (?).
Например:

тут задано Tip, я так понимаю (если правильно вообще понимаю), в программе это в дальнейшем определяется как тип картинки (расширение).
Как программа вообще понимает, что это за свойство объекта?
Или тут:

Largura и Altura свойства объекта(картинки), соответствующие количеству точек (пикселей) по вертикали и по горизонтали.
Это же свойства, которые задал программист. Я не пойму, где происходит объяснение программе, что какое свойство означает. И почему данная программа работает только с bmp форматом... Поясните, пожалуйста, и поправьте меня, где я не прав. Можно на литературку "для чайников" ссылочку... ато вроде читал "кое-что", но видимо голова дырявая, чтот не врубаюсь.

Автор - Roman777
Дата добавления - 02.08.2015 в 17:21
KSV Дата: Воскресенье, 02.08.2015, 18:46 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
почитать про тип можно, например, здесь - кратенько и доступно

В самом начале из BMP-файла в переменные bmpHeader и bmpInfoHeader (заданные типами typHeader и typInfoHeader) считываются т.н. заголовки - это некие структуры, содержащие служебную информацию о формате файла, размере картинки и т.д., чтобы в дальнейшем было удобнее с ней работать. Ведь удобнее и понятнее обратиться к свойству typInfoHeader.Bits, чтобы узнать глубину цвета картинки, чем считывать из файла значения каждого свойства отдельно по определенному смещению.

О структуре заголовков BMP-файлов можно почитать, например, здесь


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Воскресенье, 02.08.2015, 19:09
 
Ответить
Сообщениепочитать про тип можно, например, здесь - кратенько и доступно

В самом начале из BMP-файла в переменные bmpHeader и bmpInfoHeader (заданные типами typHeader и typInfoHeader) считываются т.н. заголовки - это некие структуры, содержащие служебную информацию о формате файла, размере картинки и т.д., чтобы в дальнейшем было удобнее с ней работать. Ведь удобнее и понятнее обратиться к свойству typInfoHeader.Bits, чтобы узнать глубину цвета картинки, чем считывать из файла значения каждого свойства отдельно по определенному смещению.

О структуре заголовков BMP-файлов можно почитать, например, здесь

Автор - KSV
Дата добавления - 02.08.2015 в 18:46
Roman777 Дата: Воскресенье, 02.08.2015, 19:09 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
KSV, Спасибо! буду изучать... буржуйский... я бы не сказал, что доступно, но попробуем)


Много чего не знаю!!!!
 
Ответить
СообщениеKSV, Спасибо! буду изучать... буржуйский... я бы не сказал, что доступно, но попробуем)

Автор - Roman777
Дата добавления - 02.08.2015 в 19:09
KSV Дата: Воскресенье, 02.08.2015, 19:18 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
почему данная программа работает только с bmp форматом

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


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
почему данная программа работает только с bmp форматом

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

Автор - KSV
Дата добавления - 02.08.2015 в 19:18
Roman777 Дата: Воскресенье, 02.08.2015, 20:44 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
В самом начале из BMP-файла в переменные bmpHeader и bmpInfoHeader (заданные типами typHeader и typInfoHeader) считываются т.н. заголовки - это некие структуры, содержащие служебную информацию о формате файла, размере картинки и т.д., чтобы в дальнейшем было удобнее с ней работать. Ведь удобнее и понятнее обратиться к свойству typInfoHeader.Bits, чтобы узнать глубину цвета картинки, чем считывать из файла значения каждого свойства отдельно по определенному смещению.

Интуитивно примерно так и думал.
я пока опережу своё осознание той информации что вы скинули и спрошу сразу.
Вот это считывание "заголовков" происходит уже на этапе задания типов:
[vba]
Код
Private Type....
......
End Type
[/vba]
?
почему-то, тут формат не "BMP" проверяется а "BM". А при попытке изменить на BMP (при этом я так же изменял и Tip as string*2 на *3), условие срабатывало и говорило что не тот формат


Видимо, в свойстве файла всё-таки bmp формат читается всё-таки как "BM"?


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Воскресенье, 02.08.2015, 21:09
 
Ответить
Сообщение
В самом начале из BMP-файла в переменные bmpHeader и bmpInfoHeader (заданные типами typHeader и typInfoHeader) считываются т.н. заголовки - это некие структуры, содержащие служебную информацию о формате файла, размере картинки и т.д., чтобы в дальнейшем было удобнее с ней работать. Ведь удобнее и понятнее обратиться к свойству typInfoHeader.Bits, чтобы узнать глубину цвета картинки, чем считывать из файла значения каждого свойства отдельно по определенному смещению.

Интуитивно примерно так и думал.
я пока опережу своё осознание той информации что вы скинули и спрошу сразу.
Вот это считывание "заголовков" происходит уже на этапе задания типов:
[vba]
Код
Private Type....
......
End Type
[/vba]
?
почему-то, тут формат не "BMP" проверяется а "BM". А при попытке изменить на BMP (при этом я так же изменял и Tip as string*2 на *3), условие срабатывало и говорило что не тот формат


Видимо, в свойстве файла всё-таки bmp формат читается всё-таки как "BM"?

Автор - Roman777
Дата добавления - 02.08.2015 в 20:44
Roman777 Дата: Воскресенье, 02.08.2015, 21:12 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
KSV, Я правильно понимаю, что когда мы задаём тип и считываем заголовки с таких объектов (картинок, например), тут главное следовать этой структуре заголовков.
Ибо первое свойство будет соответствовать первому заголовку, второе свойство - второму заголовку и тд?
А где же можно найти информацию о структурах этих заголовков для разных типов файлов?
По идее, можно же как-то макросом пройтись и вытащить их наименования хотябы, чтобы увидеть эту структуру?


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Воскресенье, 02.08.2015, 21:13
 
Ответить
СообщениеKSV, Я правильно понимаю, что когда мы задаём тип и считываем заголовки с таких объектов (картинок, например), тут главное следовать этой структуре заголовков.
Ибо первое свойство будет соответствовать первому заголовку, второе свойство - второму заголовку и тд?
А где же можно найти информацию о структурах этих заголовков для разных типов файлов?
По идее, можно же как-то макросом пройтись и вытащить их наименования хотябы, чтобы увидеть эту структуру?

Автор - Roman777
Дата добавления - 02.08.2015 в 21:12
KSV Дата: Воскресенье, 02.08.2015, 21:27 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
[vba]
Код
Private Type typHeader
      Tip As String * 2   ' 4 байта (2 символа UNICODE)
      Tamanho As Long  ' 4 байта
      res1 As Integer     ' 2 байта
      res2 As Integer     ' 2 байта
      Offset As Long      ' 4 байта
End Type
[/vba]просто описывает структуру (порядок расположения и размер переменных), затем объявляется переменная bmpHeader, а считывание заголовков происходит уже в эту переменную [vba]
Код
    Get #1, 1, bmpHeader
[/vba], при этом из BMP-файла считывается 14 байт, (соответственно размеру структуры typHeader) и каждый считанный байт сразу ложится "на свое место" (например, в bmpHeader.Tip вы увидите символы "BM", а в bmpHeader.Offset - смещение до первого блока данных - массива с информацией о цвете каждого пиксела) и т.д.
Почитайте про структуру формата BMP, например в википедии, хотя, лучше найти в инете представление структуры в виде последовательности блоков (визуальное представление более наглядно).


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Воскресенье, 02.08.2015, 22:18
 
Ответить
Сообщение[vba]
Код
Private Type typHeader
      Tip As String * 2   ' 4 байта (2 символа UNICODE)
      Tamanho As Long  ' 4 байта
      res1 As Integer     ' 2 байта
      res2 As Integer     ' 2 байта
      Offset As Long      ' 4 байта
End Type
[/vba]просто описывает структуру (порядок расположения и размер переменных), затем объявляется переменная bmpHeader, а считывание заголовков происходит уже в эту переменную [vba]
Код
    Get #1, 1, bmpHeader
[/vba], при этом из BMP-файла считывается 14 байт, (соответственно размеру структуры typHeader) и каждый считанный байт сразу ложится "на свое место" (например, в bmpHeader.Tip вы увидите символы "BM", а в bmpHeader.Offset - смещение до первого блока данных - массива с информацией о цвете каждого пиксела) и т.д.
Почитайте про структуру формата BMP, например в википедии, хотя, лучше найти в инете представление структуры в виде последовательности блоков (визуальное представление более наглядно).

Автор - KSV
Дата добавления - 02.08.2015 в 21:27
KSV Дата: Воскресенье, 02.08.2015, 21:52 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
первое свойство будет соответствовать первому заголовку, второе свойство - второму заголовку и тд

структура BITMAPFILEHEADER (typHeader) - содержит инфу о самом файле (тип, размер и т.д.), а по типу "BM" уже видно, что это формат BMP, а значит следом за структурой BITMAPFILEHEADER располагаются данные в соответствии со структурой BITMAPINFO (typInfoHeader), и эта структура уже описывает свойства картинки в формате BMP (ширину и высоту в пикселях, глубина цвета в битах и т.д.), а за этой структурой уже информация о цвете каждого пиксела (на ее начало указывает bmpHeader.Offset, а ее размер = ширина картинки * высоту * глубину цвета (в байтах).)

где же можно найти информацию о структурах этих заголовков для разных типов файлов

это все описывается в спецификациях к форматам (наберите в поисковиках, например, "структура файла bmp" или "структура файла jpeg")

UPD
вот, нашел более-менее наглядное представление структуры файла BMP, к тому же с примерами на VB


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Воскресенье, 02.08.2015, 22:17
 
Ответить
Сообщение
первое свойство будет соответствовать первому заголовку, второе свойство - второму заголовку и тд

структура BITMAPFILEHEADER (typHeader) - содержит инфу о самом файле (тип, размер и т.д.), а по типу "BM" уже видно, что это формат BMP, а значит следом за структурой BITMAPFILEHEADER располагаются данные в соответствии со структурой BITMAPINFO (typInfoHeader), и эта структура уже описывает свойства картинки в формате BMP (ширину и высоту в пикселях, глубина цвета в битах и т.д.), а за этой структурой уже информация о цвете каждого пиксела (на ее начало указывает bmpHeader.Offset, а ее размер = ширина картинки * высоту * глубину цвета (в байтах).)

где же можно найти информацию о структурах этих заголовков для разных типов файлов

это все описывается в спецификациях к форматам (наберите в поисковиках, например, "структура файла bmp" или "структура файла jpeg")

UPD
вот, нашел более-менее наглядное представление структуры файла BMP, к тому же с примерами на VB

Автор - KSV
Дата добавления - 02.08.2015 в 21:52
Udik Дата: Воскресенье, 02.08.2015, 22:32 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
считывается 14 байт


Э, а разве не 16? Вроде из описания структуры следует, что 4*3+2+2 =16 (может я чего-то не так понимаю)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
считывается 14 байт


Э, а разве не 16? Вроде из описания структуры следует, что 4*3+2+2 =16 (может я чего-то не так понимаю)

Автор - Udik
Дата добавления - 02.08.2015 в 22:32
KSV Дата: Воскресенье, 02.08.2015, 22:41 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Udik, считывается 14, просто первые 2 байта преобразуются в 2 символа UNICODE, которые в структуре занимают 4 байта


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
СообщениеUdik, считывается 14, просто первые 2 байта преобразуются в 2 символа UNICODE, которые в структуре занимают 4 байта

Автор - KSV
Дата добавления - 02.08.2015 в 22:41
Udik Дата: Воскресенье, 02.08.2015, 22:43 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
ага, понял.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщениеага, понял.

Автор - Udik
Дата добавления - 02.08.2015 в 22:43
Roman777 Дата: Понедельник, 03.08.2015, 07:38 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
KSV, Большое спасибо за такие подробные разъяснения!


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Понедельник, 03.08.2015, 09:28
 
Ответить
СообщениеKSV, Большое спасибо за такие подробные разъяснения!

Автор - Roman777
Дата добавления - 03.08.2015 в 07:38
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для попиксельной заливки картинки в ячейки эксель (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!