Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2010, 22:41   #11
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Проверил... TIcon при сохранении почему-то изменяет битность картинки на 4... о__О
Ну или только одну из масок сохраняет... В общем касяк какой-то... Наверное обнаружился ещё один баг VCL...

Надо будет подумать на этим... Возможно "Придётся вручную..." (c)
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 24.07.2010, 11:12   #12
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от StartMis Посмотреть сообщение
з пост- если честно то непонял как его заточить под мои нужды. на с чет 4 поста - потеря качества.
3 и 4 одинаковые! разница в том, что в 3 битовая маска создается в процессе, а в 4 подразумевается альфаканал в самом битмапе. Это самый правильный вариант преобразования битмапа в иконку, т.ч. разбирайся.
x128 вне форума Ответить с цитированием
Старый 24.07.2010, 17:22   #13
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
Это самый правильный вариант преобразования битмапа в иконку
Преобразуется-то всё правильно... А вот TIcon.SaveToFile() что-то совсем не то делает...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 25.07.2010, 13:23   #14
StartMis
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 175
По умолчанию

а как можно без TIcon.SaveToFile() т.е вручную.
StartMis вне форума Ответить с цитированием
Старый 25.07.2010, 16:19   #15
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
Преобразуется-то всё правильно... А вот TIcon.SaveToFile() что-то совсем не то делает...
Не знаю, может мой шаманский бубен другой конструкции
Прикрепить пример не удалось, что-то на форуме видать сломалось, вот ссылка на пример, там можно даже таскать картинку в качестве курсора.
Цитата:
Сообщение от StartMis Посмотреть сообщение
а как можно без TIcon.SaveToFile() т.е вручную.
Формат ICO простой, можно все руками разобрать и собрать. В этом есть смысл если нужно разобрать многоформатную иконку, в противном случае TIcon вполне подходит.
x128 вне форума Ответить с цитированием
Старый 25.07.2010, 16:43   #16
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Хм..... А значок-то какой..... Delphi 2010?

Перескомпилировал в Делфи7 - сохраняет кошмар: > ссыль <
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 25.07.2010, 19:46   #17
StartMis
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 175
По умолчанию

на Делфи6 и 7 как уже писалось сохраняет кошмар. скомпилированный exe в архиве сохраняет нормально. помогите как все сохранить вручную чтобы на д7 работало.
StartMis вне форума Ответить с цитированием
Старый 25.07.2010, 20:38   #18
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

На неделе смогу получить доступ к компу с Delphi2010... Возможно получится вытащить сохранение оттуда или хотя бы выяснить в чём там дело (попытка не пытка ©)...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 26.07.2010, 00:12   #19
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
Хм..... А значок-то какой..... Delphi 2010?

Перескомпилировал в Делфи7 - сохраняет кошмар
У меня Delphi 2006, мне интересно, если таскать картинку, курсор нормальный или такой же как при записи?

Обновил пример, теперь иконка записывается без использования TIcon. Надеюсь будет работать в делфи 7.
сама процедура:
Код:
procedure SaveIcon(fname: string);
type
  TIconRec = packed record
    Width: byte;
    Height: byte;
    Colors: byte;
    Reserved: byte;
    Planes: word;
    BPP: word;
    DIBSize: dword;
    DIBOffset: dword;
  end;
var
  i: integer;
  ico: file of byte;
  hdr: TCursorOrIcon;
  irec: TIconRec;
  binfo: TBitmapInfoHeader;
  mask: TBitmap;
begin
  hdr.Reserved:=0;
  hdr.wType:=1;
  hdr.Count:=1;
  AssignFile(ico, fname);
  Rewrite(ico);
  BlockWrite(ico, hdr, SizeOf(hdr));

  if bmp.Width<256 then irec.Width:=bmp.Width else irec.Width:=0;
  if bmp.Height<256 then irec.Height:=bmp.Height else irec.Height:=0;
  irec.Colors:=0;
  irec.Reserved:=0;
  irec.Planes:=0;
  irec.BPP:=32;
  irec.DIBSize:=(bmp.Width*bmp.Height*4)+(bmp.Width*bmp.Height div 8);
  irec.DIBOffset:=SizeOf(hdr)+SizeOf(irec);
  BlockWrite(ico, irec, SizeOf(irec));

  binfo.biSize:=SizeOf(binfo);
  binfo.biWidth:=bmp.Width;
  binfo.biHeight:=bmp.Height*2;
  binfo.biPlanes:=1;
  binfo.biBitCount:=32;
  binfo.biCompression:=BI_RGB;
  binfo.biSizeImage:=bmp.Width*bmp.Height*4;
  binfo.biXPelsPerMeter:=0;
  binfo.biYPelsPerMeter:=0;
  binfo.biClrUsed:=0;
  binfo.biClrImportant:=0;
  BlockWrite(ico, binfo, SizeOf(binfo));
  for i:=bmp.Height-1 downto 0 do BlockWrite(ico, bmp.ScanLine[i]^, bmp.Width*4);

  mask:=TBitmap.Create;
  mask.Monochrome:=true;
  mask.SetSize(bmp.Width, bmp.Height);
  mask.Canvas.Brush.Color:=clBlack;
  mask.Canvas.FillRect(mask.Canvas.ClipRect);
  for i:=mask.Height-1 downto 0 do BlockWrite(ico, mask.ScanLine[i]^, mask.Width div 8);
  mask.Destroy;

  CloseFile(ico);
end;

Последний раз редактировалось Stilet; 26.07.2010 в 16:04.
x128 вне форума Ответить с цитированием
Старый 27.07.2010, 20:02   #20
StartMis
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 175
По умолчанию

нет когда таскаеш все нормально. а в procedure SaveIcon(fname: string); ругается на TCursorOrIcon (и без него следовательно не сохраняет вовсе). а также ругается на SetSize в строке mask.SetSize(bmp.Width, bmp.Height);

Последний раз редактировалось StartMis; 27.07.2010 в 20:29.
StartMis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Bmp в ico AngelOfDeath Мультимедиа в Delphi 9 30.12.2008 06:21
PSD в ICO vinni Мультимедиа в Delphi 10 03.10.2008 16:52
Конвертация ICO в BMP DeDoK Общие вопросы Delphi 5 15.07.2008 23:44
Ico Zeraim Мультимедиа в Delphi 8 22.05.2008 09:11