Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MCRC=3B8CC3F
- MVersion=0.0.1
- CreateShaderBitmap(width, height, vertical="false") {
- Global shaderObj, RLMediaPath
- Global shaderName, shaderColor, shaderTransparency, shaderChangeKey, shaderObj
- if (shaderObj){
- Log(A_ThisFunc . " - Started",2)
- pBitmap_temp := Gdip_CreateBitmap(width, height)
- G_temp := Gdip_GraphicsFromImage(pBitmap_temp), Gdip_SetSmoothingMode(G_temp, 4), Gdip_SetInterpolationMode(G_temp, 7)
- if (shaderColor){ ; priority for the color defined on RL
- transparency := ToBase( Round( (ToBase("0x" . SubStr(shaderColor,1,2),10)) * (shaderTransparency ? (shaderTransparency/255) : 1) ) , 16)
- Gdip_FillRectangle(G_temp, Gdip_BrushCreateSolid("0x" . transparency . SubStr(shaderColor,3,6)), 0, 0, width, height)
- }
- for index, element in shaderObj["overlays"]
- { if !(element["orientation"]) or ( (element["orientation"]="horizontal") and (vertical = "false") ) or ( (element["orientation"]="vertical") and (vertical = "true") ) {
- if ((element.HasKey("solid-color")) and !(shaderColor)){ ; solid color layer
- transparency := ToBase( Round( (ToBase("0x" . SubStr(element["solid-color"],1,2),10)) * (shaderTransparency ? (shaderTransparency/255) : 1) ) , 16)
- Gdip_FillRectangle(G_temp, Gdip_BrushCreateSolid("0x" . transparency . SubStr(element["solid-color"],3,6)), 0, 0, width, height)
- } else if (element["filename"]){ ; image layer
- alpha := element["alpha-channel"] ? element["alpha-channel"] : 255
- transparency := (element["matrix"]) ? (element["matrix"]) : ( (alpha/255) * ( shaderTransparency ? (shaderTransparency/255) : 1 ) )
- shaderBitmap_temp := Gdip_CreateBitmapFromFile(RLMediaPath . "\Shaders\" . shaderName . "\" . element["filename"])
- if (element["size-mode"]="tile"){
- shaderBitmap_temp := RepeatBitmap(shaderBitmap_temp, width, height)
- Gdip_DrawImage(G_temp, shaderBitmap_temp, 0, 0, width, height,,,,, transparency)
- } else {
- Gdip_DrawImage(G_temp, shaderBitmap_temp, 0, 0, width, height,,,,, transparency)
- }
- } else
- Log(A_ThisFunc . " - Invalid shader overlay element: index" . index . ". Each overlay must contain a key named: filename, for the case of images, or solid-color, for the case of solid background colors.",2)
- }
- }
- If shaderBitmap_temp ;discarding temp GDIP assets
- Gdip_DisposeImage(shaderBitmap_temp)
- Gdip_DeleteGraphics(G_temp)
- Log(A_ThisFunc . " - Ended",2)
- Return pBitmap_temp
- }
- Return
- }
- RepeatBitmap(pBitmap, width, height, Dispose=1) {
- Gdip_GetImageDimensions(pBitmap, origW, origH)
- pBitmap_temp := Gdip_CreateBitmap(width, height)
- G_temp := Gdip_GraphicsFromImage(pBitmap_temp), Gdip_SetSmoothingMode(G_temp, 4), Gdip_SetInterpolationMode(G_temp, 7)
- Loop,
- { i := a_index
- Loop,
- { j := A_Index
- Gdip_DrawImage(G_temp, pBitmap, (i-1)*origW, (j-1)*origH, origW, origH)
- if (j*origH>height)
- break
- }
- if (i*origW>width)
- break
- }
- Gdip_DeleteGraphics(G_temp)
- if Dispose
- Gdip_DisposeImage(pBitmap)
- return pBitmap_temp
- }
- ; Converts a base 10 number to base 36
- ;from Laszlo : http://www.autohotkey.com/board/topic/15951-base-10-to-base-36-conversion/#entry103624
- ToBase(n,b) { ; n >= 0, 1 < b <= 36
- Loop {
- d := mod(n,b), n //= b
- m := (d < 10 ? d : Chr(d+55)) . m
- IfLess n,1, Break
- }
- Return m
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement