Конференция "Игры" » Полупрозрачный Image [Delphi, Windows]
 
  • Danco © (19.12.07 05:47) [0]
    Здравствуйте! Я пишу игрушку на Delphi и меня заинтересовал один интересный вопрос. Сейчас попробую пояснить, в чем проблема. На форме лежит Image и мне нужно в некоторых местах сделать его полностью прозрачным, а в некоторых полупрозрачным. Хочу сделать эффект - взрыва. Пожалуйста, помогите с проблемкой или дайте ссылку на исходник. Буду очень благодарен.

    P.S. Сразу скажу, что компонентами DelphiX я не пользуюсь.
  • homm © (19.12.07 07:18) [1]
  • @!!ex © (19.12.07 14:39) [2]
    IMage для этого точно не лучший вариант...
  • Elec3C © (19.12.07 21:12) [3]

    > @!!ex ©

    Хех! Прикинь, если гонки - все объекты в TImage... ППЦ полное)))
  • DVM © (19.12.07 22:10) [4]

    > P.S. Сразу скажу, что компонентами DelphiX я не пользуюсь.

    Тогда и TImage не пользуйся. Из всех вариантов ты выбрал самый тормозной и негибкий. Рисуй все в памяти а потом выводи прямо на окно формы.
  • Danco © (02.01.08 22:41) [5]
    Всем спасибо! Вы были правы как и все ...Эх! Решил все-таки изучить компоненты DelphiX. Что-то вроде получается... но вот опять вопросик: как сделать альфа-прозрачность в DelphiX? Кто сможет, помогите пожалуйста! :)
  • Elec3C © (02.01.08 23:14) [6]

    > Danco ©

    Выкинь DelphiX куда-нить подальше! Учись писать на чистом WinAPI + DirectX(Direct3D API) или OGL API. С DirectX API могу помочь. Есть базовые знания по Direct3D9, DirectInput, DirectSound, DirectMusic, DirectShow9.
  • Danco © (02.01.08 23:24) [7]
    >>Elec3C
    Буду очень благодарен, если поможешь. :) Так ка знаю, что DelphiX не очень хорошая вешь... Много проблем с ней ...проверил на практике.
  • Elec3C © (03.01.08 00:33) [8]

    > DelphiX не очень хорошая вешь

    Ну так чё собираешься писать на ней тогда! Или ты подумал, что DelphiX и DirectX это одно и тоже???
  • Danco © (03.01.08 15:48) [9]
    Elec3C ©

    Нет...

    >С DirectX API могу помочь.

    Чем именно можешь помочь?
  • Elec3C © (11.01.08 20:08) [10]
    А чем надо, тем и могу помочь(по DX API конечно же).
  • Danco © (13.01.08 00:13) [11]
    Хочу знать ВСЕ! ;) Книгу на днях купил по OpenGL Краснова. Что-то там мало чего интересного... Можешь подкинуть какую-нить книжку по DX API ...почитать что ли, а то не совсем понимаю что это такое. )

    P.S. Всех! С Новым годом!
  • Ketmar_ (13.01.08 15:04) [12]
    возьмы PowerDraw/Asphyre и не изобретай велосипеды.

    зыж ПОЛНОСТЬЮ прозрачная картинка попросту не видна и потому не нужна.
  • Pir (15.01.08 16:16) [13]
    Э-э-э! Вы тут на GDI не наезжайте =). В-общем, тут есть четыре варианта: рисовать не каждый пискель, рисовать действительно полупрозрачные пиксели, рисовать на полупрозрачной поверхности и еще один =).
    Первый вариант реализуется простым циклом или отрисовкой по маске.
    Второй вариант требует, чтоб была задняя поверхность. Берутся 2 пикселя: из исходного изображения и из соотв. места на задней поверхности. Эти пиксели преобразуются из RGB в HLS, вычисляется среднее значение, преобразуется обратно в RGB и рисуется =).
    Третий вариант. Рисуем все не на TImage, а на потомке от TWinControl, например, на TPanel, и уже этому компоненту ставим прозрачность, например, этой функцией:
    function SetWindowAlpha(Window: HWND; Alpha: Byte; UseColorKey: Boolean = False; ColorKey: COLORREF = $000000): Boolean;
    const
     ColorKeys: Array[False..True] of Integer = (0, LWA_COLORKEY);
    var
     AStyle: Integer;
    begin
     Result := False;
     AStyle := GetWindowLong(Window, GWL_EXSTYLE);
     if (Alpha = 255) and (not UseColorKey) then begin
       Result := SetWindowLong(Window, GWL_EXSTYLE, AStyle or not WS_EX_LAYERED) <> 0;
     end else begin
       if SetWindowLong(Window, GWL_EXSTYLE, AStyle or WS_EX_LAYERED) = 0 then Exit;
       Result := SetLayeredWindowAttributes(Window, ColorKey, Alpha, LWA_ALPHA or ColorKeys[UseColorKey]);
     end;
    end;


    Четвертый вариант - воспользоваться сторонними функциями =)
  • Pir (15.01.08 16:18) [14]

    > Можешь подкинуть какую-нить книжку по DX API ...почитать
    > что ли, а то не совсем понимаю что это такое.

    Э... Я пытался разобраться по мануалу из DX SDK, примерам оттуда же и статьям с сайтов типа mirgames.ru (хотя на old.mirgames.ru статей побольше)
  • Danco © (18.01.08 04:06) [15]
    Pir
    Спасибо!
  • Darkmoon (18.01.08 09:23) [16]
    Danco как понятно из первого сообщения то ты делаешь 2D игру, и честнго говоря компонент TImage действительно не самый лучший выбор, так как  поддержка альфа канала у него конечно есть, но он страшно глюююючит на больших разрешениях из за структуры прорисовки окна, она может нормально работать только 24 битными изображениями, так что у тебя один выход рисовать всё на одном большом битмапе а ещё лучше берез GDI+(там и сглаживание есть, притом не надо особо мудится) прямо на форме, а что касается взрыва надо закатать в png файл по кадрам весь твой взрыв и потом по кадрам его выводить либо через gdi(альфа канал там при прорисовке автоматом поддерживается).
 
Конференция "Игры" » Полупрозрачный Image [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]