Показать сообщение отдельно
Старый 14.03.2009, 16:25   #26
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,371
Написано 2,477 полезных сообщений
(для 6,865 пользователей)
Ответ: Глупый вопрос

Решение про накладывание изображения на изображение:

Graphics 800600

Explosion 
LoadImage("Картинка1")
bg LoadImage("Картинка2"DYNAMICIMAGE)


Repeat
Cls


DrawImage bg
00
If MouseHit(1)
    
DrawToPixmap(Explosion0LockImage(bg), MouseX(), MouseY())
End If

Flip
Until KeyHit
(KEY_ESCAPE)


Function 
ARGB_Alpha:Int(ARGB:Int)
 Return (
argb Shr 24) & $ff
 
'Return Int((ARGB & $FF000000:Int) / $1000000:Int) 
End Function

Function ARGB_Red:Int(ARGB:Int)
  Return (argb Shr 16) & $ff
Return Int((ARGB & $00FF0000:Int) / $10000:Int)
End Function

Function 
ARGB_Green:Int(ARGB:Int)
  Return (
argb Shr 8) & $ff
' Return Int((ARGB & $0000FF00:Int) / $100:Int)
End Function

Function ARGB_Blue:Int(ARGB:Int)
 Return (argb & $ff) 
Return (ARGB & $000000FF:Int)
End Function

Function 
ARGB_Color:Int(alpha:Int,red:Int,green:Int,blue:Int)
 Return (
Int(alpha * $1000000) + Int(RED * $10000) + Int(green * $100) + Int(blue)) 
End Function

Function 
DrawToPixmap(image:TImageframenr:Int 0Pixmap:TPixmapx:Inty:Intalpha:Float 1.0Multiply:Int 1)
      
Local TempPix:TPixmap Null
      
If framenr 0 Then TempPix LockImage(image)
      If 
framenr 0 Then TempPix LockImage(imageFramenr
      For 
Local i:Int 0 To ImageWidth(image) - 1
        
For Local j:Int 0 To ImageHeight(image) - 1
          
If pixmap.width And pixmap.Height 'And i >= x And j >= y
            Local sourcepixel:Int = ReadPixel(TempPix, i, j) 
            Local destpixel:Int = ReadPixel(pixmap, x+i,y+j)
            Local destA:Float = ARGB_Alpha(destpixel) 
            Local sourceA:Float = ARGB_Alpha(sourcepixel) * alpha
            If sourceA = 255 Then destA = 0
                Local destR:Float = ARGB_Red(destpixel)
                Local destG:Float = ARGB_Green(destpixel) 
                Local destB:Float = ARGB_Blue(destpixel) 
                Local SourceR:Float = ARGB_Red(Sourcepixel) 
                Local SourceG:Float = ARGB_Green(Sourcepixel) 
                Local SourceB:Float = ARGB_Blue(Sourcepixel) 
                    Local AlphaSum:Int = destA + sourceA
                    If multiply = 1
                        sourceR = (sourceR  * sourceA / AlphaSum) + destA / AlphaSum * (destR * destA / AlphaSum) 
                        sourceG = (sourceG  * sourceA / AlphaSum) + destA / AlphaSum * (destG * destA / AlphaSum) 
                        sourceB = (sourceB  * sourceA / AlphaSum) + destA / AlphaSum * (destB * destA / AlphaSum) 
                    Else
                        sourceR = (sourceR  * sourceA / AlphaSum) + (destR * destA / AlphaSum) 
                        sourceG = (sourceG  * sourceA / AlphaSum) + (destG * destA / AlphaSum) 
                        sourceB = (sourceB  * sourceA / AlphaSum) + (destB * destA / AlphaSum) 
                    EndIf
                    If AlphaSum > 255 Then AlphaSum = 255
                    sourcepixel = ARGB_Color(AlphaSum, SourceR, sourceG, sourceB) 
            If SourceA <> 0 Then WritePixel(Pixmap, x + i, y + j, sourcepixel)
          EndIf
        Next
      Next
      If framenr = 0 UnlockImage(image)
      If framenr > 0 UnlockImage(image, framenr)
End Function 
Этот способ ещё тормознее и без alpha канала:
Local e:TPixmap LockImage(imgBlood)
    
Local p:TPixmap LockImage(imgFloor)
    
MaskPixmap(e000)
    
p.Paste(eMouseX(), MouseY())
    
UnlockImage(imgBlood)
    
UnlockImage(imgFloor
Нужели это всё, что можно сделать?
В Blitz3D подобное - расплюнуть.
Я понимаю, что тут какбы 3D-2D, но ведь SetBuffer(TextureBuffer()) в B3D есть, значит и тут чёто подобное должнобыть.
Просто я помню как я грабил экран в B3D и текстурил этим всю мапу и воду и скайбокс и юнитов. Баловался кароче
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti

Последний раз редактировалось Randomize, 14.03.2009 в 19:31.
(Offline)
 
Ответить с цитированием