Notifications
Clear all

[Closed] Swap alpha channel of 2 images- is it possible?

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?

6 Replies

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.

The problem is how to getpixel – setpixel only in alpha channel.
See the images:
img1
with alpha channel:

img2
with alpha channel:

Run the script. And swaped alpha channels:
img1
with alpha:
img2
with 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.

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…

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

as i see it doesn’t need new set of bitmaps. you can swap original ones.

denisT, DaveWortley, thank you very much.