---------------------------------------------------
--Script:	RGBAout
--Version:	0.1
--Started: 	07/18/2000
--Edited:	07/18/2000
--By:		Borislav Petrov
--Email:	bobo@email.archlab.tuwien.ac.at
---------------------------------------------------


plugin RenderEffect RGBAout name:"RGBAout"
classID:#(0x2bdd649b, 0x99bcb5dd)
(

parameters rgbao_main rollout:tvrgbao_roll
(
color_channels type:#integer default:1 ui:color_channels 
output_base type:#string default:"" ui:output_base
save_red type:#boolean default:true ui:save_red
save_green type:#boolean default:true ui:save_green
save_blue type:#boolean default:true ui:save_blue
save_alpha type:#boolean default:true ui:save_alpha
)

rollout tvrgbao_roll "RGBAout"
(
group "Info"
(
label rgbao_label01 "This RenderEffect saves all 4 color channels."
label rgbao_label02 "as separate images for later compositing."
)

group "Settings"
(
button get_path "Get Path" across:2 align:#left width:50 height:18
edittext output_base enabled:false align:#right width:246
radiobuttons color_channels labels:#("Colored Images", "Monochrome Images")
checkbutton save_red "Save RED" across:4 align:#left highlightcolor:(color 255 128 128) width:70
checkbutton save_green "Save GREEN" align:#center highlightcolor:(color 128 255 128) width:74 offset:[-1,0]
checkbutton save_blue "Save BLUE" align:#center highlightcolor:(color 128 128 255) width:74 offset:[1,0]
checkbutton save_alpha "Save ALPHA" align:#right highlightcolor:(color 255 255 128) width:70
)

on get_path pressed do
(
new_path = getSaveFileName types:"Targa (*.tga)|*.tga|MS Bitmap (*.bmp)|*.bmp|TIFF (*.tif)|*.tif"
if new_path != undefined then output_base.text = new_path
)

group "About..."
(
label rgbao_label03 "RBGAout"
label rgbao_label07 "Version 0.1 - 07/18/2000"
label frgbao_label05 "Code by Borislav Petrov"
label rgbao_label06 "http://www.gfxcentral.com/bobo/"
)

)

on apply img do
(
fn zero_return zn =
(
return_string = ""
case (zn as string).count of 
	(
	1: return_string = "000"
	2: return_string = "00"
	3: return_string = "0"
	)
return_string
)

r_channel = bitmap img.width img.height
g_channel = bitmap img.width img.height
b_channel = bitmap img.width img.height
a_channel = bitmap img.width img.height

if output_base != "" then 
(
current_time = currenttime.frame as integer
zeros = zero_return current_time 
time_string = zeros + current_time as string
r_channel.filename = (getfilenamepath output_base)+(getfilenamefile output_base)+time_string+"_Red"+(getfilenametype output_base)
g_channel.filename = (getfilenamepath output_base)+(getfilenamefile output_base)+time_string+"_Green"+(getfilenametype output_base)
b_channel.filename = (getfilenamepath output_base)+(getfilenamefile output_base)+time_string+"_Blue"+(getfilenametype output_base)
a_channel.filename = (getfilenamepath output_base)+(getfilenamefile output_base)+time_string+"_Alpha"+(getfilenametype output_base)
)

for j = 1 to img.height do 
(
get_line = getpixels img [0,j-1] img.width
red_line = #()
green_line = #()
blue_line = #()
alpha_line = #()
for k = 1 to get_line.count do
(
if color_channels == 1 then
	(
	red_line[k] = color (get_line[k].r) 0 0 (get_line[k].a)
	green_line[k] = color 0 (get_line[k].g) 0 (get_line[k].a)
	blue_line[k] = color 0 0 (get_line[k].b) (get_line[k].a)
	)
	else
	(
	red_line[k] = color (get_line[k].r) (get_line[k].r) (get_line[k].r) (get_line[k].a)
	green_line[k] = color (get_line[k].g) (get_line[k].g) (get_line[k].g) (get_line[k].a)
	blue_line[k] = color (get_line[k].b) (get_line[k].b) (get_line[k].b) (get_line[k].a)
	)
alpha_line[k] = color (get_line[k].a) (get_line[k].a) (get_line[k].a) (get_line[k].a)
)

if save_red then setpixels r_channel [0,j-1] red_line
if save_green then setpixels g_channel [0,j-1] green_line
if save_blue then setpixels b_channel [0,j-1] blue_line
if save_alpha then setpixels a_channel [0,j-1] alpha_line
)--end k	

if output_base != "" then 
(
try
(
if save_red then save r_channel
if save_green then save g_channel
if save_blue then save b_channel
if save_alpha then save a_channel
)
catch()
)

close r_channel
close g_channel
close b_channel
close a_channel

)--end apply

)--end plugin