O сохранении иконок 3. Автор: Владимир. Суть вопроса: я столкнулся с проблемой сохранения полноцветных иконок, когда. Ни родной. Image Editor от Delphi.
На рисунке 1 показана оболочка Delphi: 1. Окно Инспектора объектов - это окно позволяет менять свойства компонентов, показывает реакции форма, *.dcu - откомпилированный файл модуля, *.res - ресурсный файл, содержащий все иконки, курсоры и прочие ресурсы программы. Программа написана на Delphi 3 для Windows 98. И, возможно, в более поздних версиях Delphi появились дополнительные возможности. Теперь попробуем применить полученные сведения на практике. Ниже приводится текст позволяющий извлекать иконки из приложений, которые.
- Delphi 7 - Урок 1( Доп.ставим иконку на программу) - Продолжительность: 7:15 Убогий Дотер 560 просмотров. Создаем красивый и быстрый браузер в Делфи 7 - Продолжительность: 14:01 Алексей Иванов 8 240 просмотров..
- О Delphi и Windows. О пользовательских интерфейсах компьютерных программ. Страна советов. Простая программа в виде иконки — отладочный пример. Резидентная программа для исправления текста в неправильной раскладке.
- Программы для офиса. Администрирование и мониторинг сети. Среда разработки Delphi знаком многим пользователя еще со школьных лет – именно с неё часто начиналось знакомство с миром программирования на уроках информатики.
Могли это. делать платные редакторы, но они не для нас. Начав разбираться, я обнаружил. Create. Icon. Indirect иконка нормально выглядит, если.
Icon. Save. To. File. Это происходит на стадии записи иконки.
Поискав. информацию, облазив форумы, я понял, что либо этой проблемой никто не. Став заниматься проблемой вплотную, я решил использовать нетипизированные. Эти файлы хорошо подходят. Пришлось изучить структуру файла ICO и вот результат. Для использования процедуры нет необходимости изучать файл ICO, если только. В принципе, можно. Все адреса и размеры, указанные.
ICO. В процедуру введено автоопределение количества цветов палитры, от этого. Вам нет нужды указывать количество используемых. Кроме того, введено определение размера рисунка и если он не 3. Это произойдет и в случае если кому- то захочется. Тем, кто хочет узнать о структуре файлов ICO.
Используя этот метод можно работать с любыми файлами, например, для открытия. EXE- файлов. Для работы этой процедуры нужен рисунок 3. Image. 2). диалоговое окно Save. Dialog. 1 (но не Save. Picture. Dialog. 1). Если нужно, измените имя канвы, оно встречается в двух строчках кода.
Процедура с комментариями ниже. Записываем картинку как иконку (файл .
Так как стандартные функции не дают возможности создавать 2. Создадим массив байт, который запишем как файл, это и будет.
Для этого создадим промежуточные массивы, иначе процедура. TForm. 1. Tool. Button.
Click(Sender: TObject). MAnd, MXor, MOsn, MCol: arrayof Byte. MPix, MOrg: arrayof TColor. Bt, Bu, Indicator: Byte. Len. Osn, Len. Xor, Len. Col: integer. beginif (Image.
Picture. Height < > 3. Image. 2. Picture. Width < > 3. Show. Message('Исходный рисунок не 3. Создание массивов: MAnd - массив маски AND, MXor - массив маски Xor. MOsn - куда будет собираться вся информация. MPix - массив пикселов рисунка начиная с левого нижнего угла.
MCol - массив таблицы цветов - палитры, MOrg - массив оригинальных цветов}{Заполнение массивов MPix и MAnd}{Активизация массивов}. Set. Length(MPix, 1. Set. Length(MAnd, 1. Установка счетчиков}. Счетчик битов. a : = 0; //Счетчик пикселов картинки. Счетчик байтов маски MAnd.
Bt : = 0; //Формируемый байт маски MAnd{Преобразование картинки в удобный формат, с началом от 0. MPix, меняя по пути белый - . MAnd}for m : = 3. MPix[a] : = Image.
Canvas. Pixels[n, m]. MPix[a]. if p = RGB(2. MPix[a] : = RGB(0, 0, 0).
Bt : = Bt + 1. 28. Bt : = Bt + 6. 4. Bt : = Bt + 3. 2. Bt : = Bt + 1. 6. Bt : = Bt + 8. if b = 5 then. Bt : = Bt + 4. if b = 6 then.
Bt : = Bt + 2. if b = 7 then. Bt : = Bt + 1. b : = b + 1.
MAnd[c] : = Bt. Bt : = 0. Заполнение маски MOrg нулями, предполагая 2. Set. Length(MOrg, 2.
MOrg[n] : = RGB(2. Оцениваем количество цветов и от результата переделываем MOrg}. Счетчик количества цветовfor n : = 0 to 1. MPix[n]. k : = false.
MOrg[m] then. k : = true. Show. Message('Ваш рисунок имеет более 2. MOrg : = nil. MPix : = nil. MAnd : = nil. MOrg[a] : = p. Len. Osn : = 2. 23.
Len. Xor : = 1. 02. Len. Col : = 1. 02. Indicator : = 1. if a < 1. Len. Osn : = 7. 66. Len. Xor : = 5. 12. Indicator : = 0. {Заполняем маски нулями}.
Set. Length(MXor, Len. Xor). Set. Length(MCol, Len. Col). for n : = 0 to Len. Xor - 1 dobegin. MXor[n] : = 0. Len. Col - 1 dobegin. MCol[n] : = 0. {Заполнение массива MXor согласно массива MPix}.
MPix[n]. k : = false. Bt : = 0 to 2. 55 dobeginif k = false thenif p = MOrg[Bt] thenbegin. MXor[n] : = Bt. elseif b = 1 thenbegin. Bu : = 1. 6 * Bu + Bt. MXor[c] : = Bu. c : = c + 1.
Bu : = Bt. b : = 1. Заполняем массив MCol согласно массива MOrg}begin. MOrg[n]. MCol[a] : = Get. BValue(p). MCol[a + 1] : = Get. GValue(p). MCol[a + 2] : = Get.
RValue(p). a : = a + 4. Заполняем MOsn нулями}. Set. Length(MOsn, Len. Osn). for n : = 0 to Len.
Osn - 1 do. MOsn[n] : = 0. Заполняем массив MOsn для 2. MOsn[2] : = 1. MOsn[4] : = 1.
MOsn[6] : = 3. 2. MOsn[7] : = 3. 2. MOsn[1. 4] : = $A8. MOsn[1. 5] : = 8.
MOsn[1. 8] : = $1. MOsn[2. 2] : = $2. MOsn[2. 6] : = 3. MOsn[3. 0] : = $4. MOsn[3. 4] : = 1.
MOsn[3. 6] : = 8. MOsn[4. 2] : = $8. MOsn[4. 3] : = 4.
MOsn[5. 5] : = 1. MOsn[n] : = MCol[m]. MOsn[n] : = MXor[m]. MOsn[n] : = MAnd[m].
Заполняем массив MOsn для 1. MOsn[2] : = 1. MOsn[4] : = 1. MOsn[6] : = 3. 2. MOsn[7] : = 3. 2. MOsn[8] : = 4. MOsn[1.
E8. MOsn[1. 5] : = 2. MOsn[1. 8] : = $1. MOsn[2. 2] : = $2.
MOsn[2. 6] : = 3. MOsn[3. 0] : = 6. MOsn[3. 4] : = 1. MOsn[3. 6] : = 4. MOsn[4. 3] : = 2. MOsn[5. 4] : = 1.
MOsn[n] : = MCol[m]. MOsn[n] : = MXor[m].
MOsn[n] : = MAnd[m]. Закрываем все массивы, кроме MOsn}. Записываем массив MOsn в файл, для этого создаем нетипизированный файл. MOsn}if Save. Dialog. Execute thenbegin. Assign. File(f, Save.
Dialog. 1. File. Name + '. Rewrite(f, 1). for n : = 0 to Len.
Osn - 1 dobegin. Bt : = MOsn[n]. Block. Write(f, Bt, 1). Close. File(f). MOsn : = nil. Существуют иконки более сложной структуры.
Они могут содержать несколько. Я с ними не разбирался. Может быть кто- то из профессионалов скажет - примитивщина, нагородил. Ну что. ж, может быть есть пути проще и лучше, но когда я спрашивал на форумах никто. Главное, работает без проблем.
Я всего месяц как познакомился с Delphi и Паскалем, думаю. О структуре иконки. Информации немного в интернете, но кое- что я раскопал. Пришлось просмотреть коды разных иконок, чтобы иметь о них представление.
Файл ICO очень похож на BMP. BITMAPFILEHEADER, размером обычно 2. В нем. содержится информация о файле. За ним идет BITMAPINFOHEADER, 4.
Для примера оба заголовка для 1. В квадратных скобках номер байта в файле, далее эго значение. Всегда 1. [4] : = 1; // Всегда 1. Ширина и. [7] : = 3.
Не знаю. [1. 4] : = $E8; // Младший байт размера файла минус 2. BITMAPFILEHEADER).
Старший байт размера файла. Размер BITMAPFILEHEADER. Размер заголовка BITMAPINFOHEADER. Ширина в пикселах. Высота в пикселах обоих масок в сумме. Число плоскостей.
Старший байт размера таблицы пикселов (т. Число используемых цветов (не обязательно). Остальные не указанные байты и до адреса 6.
После заголовков находится таблица цветов. Каждый цвет занимает 4 байта. По порядку - синий, зеленый, красный и нулевой. Первые 3 байта образуют цвет пиксела.
То есть, каждый пиксел на. При 1. 6 цветной иконке таблица.
По идее, при. записи иконки любая программа должна просканировать иконку и все найденные. Почему этого не происходит я не знаю.
Windows эти. цвета при записи игнорирует и устанавливает свои. Если же при 1. 6 цветной палитре используются только, допустим, 6 цветов, то. Следующим блоком в файле идет таблица пикселов. Первый пиксел это самый.
И переписываются они в таблицу построчно. Основной. параметр, по которому таблица организуется, это количество бит на пиксел. Каждый элемент этой таблицы - это номер цвета в таблице цветов. При выводе. на экран иконки берется очередной элемент, то есть номер цвета в таблице. Так как для определения номера в таблице из 1. Причем, младшие 4.
Для 2. 56 цветов необходим полный байт. Поэтому, таблица пикселов занимает. Таблица пикселов это образ маски XOR иконки, цвет, который должен быть.
И последним идет таблица маски AND. Это двухцветная маска вашего рисунка. Белый. цвет находится там, где будет прозрачный цвет, черный скрывает все.
При наложении двух масок друг на друга тот пиксел, у которого на. AND белый, а на маске XOR черный цвет, будет невидим. Так как маска AND монохромная, то один байт содержит информацию о 8. Создав массив из соответствующим образом пребразованного рисунка, мы можем. Конечно, есть разные варианты размеров иконок, у них могут меняться размеры. Существуют иконки гораздо большие размером, но я с такими не.