View Full Version : Swap alpha channel of 2 images- is it possible?

05 May 2011, 10:57 AM
Is there a way to get 2 different images and swap its alpha channel?
For example:
img1 have alpha1
img2 have alpha2
-run the script
img1 have alpha2
img2 have alpha1

Is it possible via maxscript?

05 May 2011, 11:04 AM
where is the problem? getpixels - setpixels... or you want to do anything more specific?

you can use pastebitmap with function method... but i'm not sure that this method will be faster.

05 May 2011, 11:24 AM
The problem is how to getpixel - setpixel only in alpha channel.
See the images:
img1 alpha channel:

img2 alpha channel:

Run the script. And swaped alpha channels:
img1 alpha:
img2 alpha:

How to access only the alpha channel? The getpixel and setpixel was my first thoudht, but I can't find the way to change(swap) pixels only in the alpha channles.

05 May 2011, 11:41 AM
when you get pixels there are arrays of RGBA colors.
go through all pixels and swap just Alpha components:

for k=1 to colors1.count do swap colors1[k].a colors2[k].a

something like that. if it's not working for colors (but i don't see a reason why it shouldn't work) you can convert colors to point4...

05 May 2011, 11:52 AM
I'm doing too much production work, missing maxscript, so here's a quick solution for you....


--Our two files to swap Alphs
fileA = "c:\\ImageA.tga"
fileB = "c:\\ImageB.tga"

--open both files at bitmap values
thebmpA = openbitmap fileA
thebmpB = openbitmap fileB

--create new temporary bitmaps to put new images in
newBmpA = bitmap thebmpA.width thebmpA.height
newBmpB = bitmap thebmpB.width thebmpB.height

--for every line of pixels do
for i = 1 to thebmpA.height do
--get a line of pixels for both images as an Array of Point4 values
AR_thepixels_A = Getpixels thebmpA [0,i] thebmpA.width
AR_thepixels_B = Getpixels thebmpB [0,i] thebmpB.width

--for every Point4 value in the array, swap the alpha value from A to B
for j = 1 to AR_thepixels_A.count do
swap AR_thepixels_A[j].a AR_thepixels_B[j].a

--write these new values to the new images
setpixels newbmpA [0,i] AR_thepixels_A
setpixels newbmpB [0,i] AR_thepixels_B

--close the original images so we can overwrite them
close thebmpA
close thebmpB

--give the new images the same filenames as the originals
newBmpA.filename = fileA
newBmpB.filename = fileB

--save the new images
Save newBmpA
Save newBmpB

--close the new images
Close NewBmpA
Close NewBmpB

--I always chuck in a Garbage collection here to free up memory

05 May 2011, 12:06 PM
as i see it doesn't need new set of bitmaps. you can swap original ones.

05 May 2011, 03:18 PM
denisT (, DaveWortley, thank you very much. :)

CGTalk Moderation
05 May 2011, 03:18 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.