Cерый фон вокруг иконок

Тема в разделе "WASM.BEGINNERS", создана пользователем NAGRIS, 7 май 2007.

  1. NAGRIS

    NAGRIS New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    17
    Почему вокруг иконок остается серая область? (см. рис.)

    [​IMG]

    Как сделать, чтобы она исчезла?

    В SDK написано:
    "The ImageList_AddMasked function also adds bitmapped images to a masked image list.
    This function is similar to ImageList_Add, except that you do not specify a mask bitmap.
    Instead, you specify a color that the system combines with the image bitmap to automatically generate the masks.
    Each pixel of the specified color in the image bitmap is changed to black, and the corresponding bit in the mask is set to 1.
    As a result, any pixel in the image that matches the specified color is transparent when the image is drawn. "


    Код:
    ...
    invoke LoadBitmap, [wc.hInstance], 7
    mov ebx, eax
    invoke GetObject,ebx,sizeof.BITMAP, bmp
    invoke ImageList_Create, 16, [bmp.bmHeight], ILC_COLORDDB+ILC_MASK, 30, 0
    or eax,eax
    jz end_loop
    mov [hImageList],eax
    invoke ImageList_AddMasked, [hImageList], ebx, 0xff00ff ; ff00ff = розовый = прозрачный
    invoke DeleteObject, ebx
    invoke SendMessage, [hТabControl], TCM_SETIMAGELIST, 0, [hImageList]
    ...
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Сделай иконкам заливку невидимую :)
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ILC_COLOR32

    Старые версии ImageList вообще полноцветные картинки не поддерживали, а новые поддерживают как-то не совсем правильно... Я обычно 16-цветные картинки использую :)
     
  4. NAGRIS

    NAGRIS New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    17
    censored

    C помощью графического редактора я могу назначить для *.bmp любой цвет который и будет считаться прозрачным, я это сделал, но все осталось по старому. Да и в SDK ведь написано, что нужно просто указать цвет заменяемый на прозрачный.

    Quantum

    Делал *.bmp 256-цветным и 16-цветным, но все осталось по старому. В чем проблема?
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Это только с самодельными иконами такой эффект, или со всеми подряд?
     
  6. NAGRIS

    NAGRIS New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    17
    cresta

    C самодельными ( я использую bmp 480x16 как заготовку для будущих иконок). Серый фон в заголовках ListView, в закладках SysTabControl32. Этот серый цвет совпадает с системным цветом в Свойства экрана - Оформление - Дополнительно - Текст в окне [фон], если его заменить на белый, то фон вокруг иконок станет белым.
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    NAGRIS
    Что-то у Вас напутано с цветами, ведь в примере задаётся малиновый цвет фона, а на скриншоте виден оттенок серого. Подобный код, но с 16-цветной картинкой, малиновым фоном и ключами ILC_COLOR16 | ILC_MASK у меня всю жизнь прекрасно работал. 256 и 24-бит тоже работают как надо. GetObject не нужен.

    Код (Text):
    1. hImg = ImageList_Create(BMP_WIDTH,BMP_HEIGHT,ILC_COLOR16 | ILC_MASK,1,0);
    2. hBmp = LoadImage(hInstance,(char*)LOGOBMP,IMAGE_BITMAP,0,0,0);
    3. ImageList_AddMasked(hImg,hBmp,0xFF00FF);
    Вы уверены что RGB фона задан абсолютно правильно? Может графический редактор сохраняет его иначе?
     
  8. NAGRIS

    NAGRIS New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    17
    Quantum

    Вот мой bmp

    [​IMG]

    Вот мой код

    Код (Text):
    1. ...
    2. invoke  LoadBitmap,[wc.hInstance],7      
    3. mov     ebx,eax                          
    4. invoke  GetObject,ebx,sizeof.BITMAP,bmp  
    5. invoke  ImageList_Create,16,[bmp.bmHeight],ILC_COLOR16+ILC_MASK,30,30
    6. or        eax,eax                          
    7. jz        end_loop                        
    8. mov     [hImageList],eax                
    9. invoke  ImageList_AddMasked,[hImageList],ebx,0xFF00FF
    10. invoke  DeleteObject,ebx                  
    11. invoke  SendMessage,[hТabControl],TCM_SETIMAGELIST,0,[hImageList]
    12. ...
    Фон = FF00FF

    Если закомментировать invoke GetObject,ebx,sizeof.BITMAP,bmp , то программа запустится и сразу закроется, только окно мигнет на экране.

    Я писал выше
    Может глюк FASM?
     
  9. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Если бы это был BMP, а не PNG, я бы смог проверить действительно ли в нём 16 цветов, а так от картинки пользы мало.

    Просто вместо bmp.bmHeight надо написать 16, а GetObject можно убрать подальше, т.к. она тут ничего не делает.

    У меня на XP нет такой опции. Win2k? Похоже на глюк, но только не фасма, а таб-контрола. Может, стоит поменять LoadBitmap на LoadImage на всякий случай? А если заюзать иконки вместо bmp?
     
  10. NAGRIS

    NAGRIS New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    17
    Quantum

    Картинку я загрузил только, чтобы показать, что фон не серый, а розовый. Картинка 16 цветная, для уменьшения цвета использовал Irfan View (думаю он не врет).

    GetObject удалил - спасибо!

    Нет WinXP SP2 RUS.

    Описание как добраться до описанной опции [Правый клик на рабочем столе - Свойства - закладка Оформление - кнопка Дополнительно - там картинка, жмете на окне с надписью Текст в окне. Про этот цвет я и писал. ]

    Тогда и глюк заголовка ListView ?? и возможно всех других контролов.

    Я бы заюзал иконки и LoadImage, но во всех исходниках которые я нашел, используют bmp и LoadBitmap, там этот код работает ( этот код я выдрал из какого-то исходника и немного изменил). Раз везде используют bmp и LoadBitmap, то я подумал, что это проще всего.