PDA

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


miauu
05-03-2011, 11: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?

denisT
05-03-2011, 12:04 PM
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.

miauu
05-03-2011, 12:24 PM
The problem is how to getpixel - setpixel only in alpha channel.
See the images:
img1
http://img12.imageshack.us/img12/7269/img1up.pngwith alpha channel:http://img822.imageshack.us/img822/7098/img1alpha.png

img2
http://img405.imageshack.us/img405/5333/img2zb.pngwith alpha channel:http://img848.imageshack.us/img848/4395/img2alpha.png

Run the script. And swaped alpha channels:
img1
http://img12.imageshack.us/img12/7269/img1up.pngwith alpha:http://img848.imageshack.us/img848/4395/img2alpha.png
img2
http://img405.imageshack.us/img405/5333/img2zb.pngwith alpha:http://img822.imageshack.us/img822/7098/img1alpha.png

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.

denisT
05-03-2011, 12:41 PM
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...

DaveWortley
05-03-2011, 12:52 PM
I'm doing too much production work, missing maxscript, so here's a quick solution for you....

Dave

--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
gc()

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

miauu
05-03-2011, 04:18 PM
denisT (http://forums.cgsociety.org/member.php?u=384956), DaveWortley, thank you very much. :)

CGTalk Moderation
05-03-2011, 04: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.