Xojo Conferences
MBSSep2018MunichDE
XDCMay2019MiamiUSA

Platforms to show: All Mac Windows Linux Cross-Platform

/Images/LargePicture/Picture Multiply
Function:
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Images/LargePicture/Picture Multiply
This example is the version from Sun, 20th Jan 2018.
Project "Picture Multiply.rbp"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
EventHandler Sub Open() // load a picture dim f as FolderItem = GetFolderItem("test.png") dim p as Picture = Picture.Open(f) if not p.HasAlphaChannel then MsgBox "test.png has no alpha channel?" return end if // show original dim p0 as Picture = PictureWithAlphaToPictureWithMask(p) dim w0 as new window1 w0.Title = "Original" w0.Backdrop = p0 // convert from alpha to mask dim p1 as Picture = PictureWithAlphaToPictureWithMask(p) dim w1 as new window1 w1.Title = "PictureWithMask" w1.Backdrop = p1 // show mask dim w2 as new window1 w2.Title = "Mask" w2.Backdrop = p1.CopyMask // show picture part without mask dim w3 as new window1 w3.Title = "Picture without mask" dim pm as Picture = p1.mask p1.mask = nil dim p2 as new Picture(p1.Width, p1.Height, 32) p2.Graphics.DrawPicture p1, 0, 0 w3.Backdrop = p2 p1.mask = pm // convert back dim p3 as Picture = PictureWithMaskToPictureWithAlpha(p1) dim w4 as new window1 w4.Title = "alpha" w4.Backdrop = p3 End EventHandler
Function PictureWithAlphaToPictureWithMask(pic as Picture) As Picture // converts picture with alpha to picture with mask #if RBVersion >= 2016 then dim w as integer = pic.Width dim h as integer = pic.Height if pic.Type <> Picture.Types.MutableBitmap then // make a copy, so we get a bitmap picture dim t as new Picture(w, h) t.Graphics.DrawPicture pic, 0, 0, w, h, 0, 0, w, h pic = t end if #endif if pic.HasAlphaChannel = false then // no alpha channel, so return return pic end if dim pi as new PictureMBS(pic, true) // unmultiply the image pi.Unmultiply pi.AlphaChannel.Invert return pi.CopyPictureWithMask End Function
Function PictureWithMaskToPictureWithAlpha(pic as Picture) As Picture // converts picture with mask to picture with alpha dim w as integer = pic.Width dim h as integer = pic.Height #if RBVersion >= 2016 then if pic.Type <> Picture.Types.MutableBitmap then // make a copy, so we get a bitmap picture dim t as new Picture(w, h) t.Graphics.DrawPicture pic, 0, 0, w, h, 0, 0, w, h pic = t end if #endif if pic.HasAlphaChannel then // has alpha channel, so return return pic end if #if true then // via Xojo dim t as new Picture(w, h) t.Graphics.DrawPicture pic, 0, 0, w, h, 0, 0, w, h return t #endif #if false then // with CopyPictureWithAlpha dim pi as new PictureMBS(pic, false) dim pm as new PictureMBS(pic.Mask, false) dim pp as new PictureMBS(w, h, PictureMBS.ImageFormatRGBA) call pp.CopyPixels(pi, 0, 0, w, h, 0, 0) call pp.AlphaChannel.CopyPixels(pm, 0, 0, w, h, 0, 0) pp.AlphaChannel.Invert // multiply the image pp.Multiply return pp.CopyPictureWithAlpha #endif #if false then // with Xojo picture as buffer dim pi as new PictureMBS(pic, false) dim pm as new PictureMBS(pic.Mask, false) dim xx as new Picture(w, h) dim pp as new PictureMBS(xx, true) call pp.CopyPixels(pi, 0, 0, w, h, 0, 0) call pp.AlphaChannel.CopyPixels(pm, 0, 0, w, h, 0, 0) pp.AlphaChannel.Invert // multiply the image pp.Multiply return xx #endif End Function
End Class
Class Window1 Inherits Window
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
End Project

Feedback, Comments & Corrections

The items on this page are in the following plugins: MBS Images Plugin.





Links
MBS Xojo PDF Plugins