Hi Christian,

It appears that

  PictureMBS.RowInFormat(y,ImageFormatRGBA)

is returning premultiplied RGBA data, even on Win32 which doesn't use 
Premultiplied alpha.

Here's a little test:

  #if TargetWin32
    app.UseGDIPlus = true
  #endif
  
  dim p as new picture(128,128)   // new-style 32 bit xojo picture
  
  dim c as color = &cFF000080  // Red = 255, Green = 0, Blue = 0, Alpha = 128
  
  p.Graphics.ForeColor = c
  p.Graphics.FillRect 0,0,p.width,p.height
  
  dim rgba as color = p.RGBSurface.Pixel(0,0)
  MsgBox "Pixel RGBA = " + str(rgba.Red) + " " + str(rgba.Green) + "  " + 
str(rgba.blue) + " " + str(rgba.Alpha)
  
  // now make a pictureMBS and get the data
  
  dim pm as new PictureMBS(p, p.HasAlphaChannel)
  
  dim mb as MemoryBlock = pm.RowInFormat(0,PictureMBS.ImageFormatRGBA)
  
  MsgBox "Data RGBA = " + str(mb.byte(0)) + " " + str(mb.byte(1)) + "  " + 
str(mb.byte(2)) + " " + str(mb.byte(3))
  
  
On both Mac and Windows, I get

  Pixel RGBA = 255, 0, 0, 127
  Data  RGBA = 127, 0, 0, 127

I would expect to get

  Data  RGBA = 255, 0, 0, 127

on both platforms, although I suppose you could argue that on Mac perhaps the 
premultiplied values are "right".

Is there any way I can work around this and get the raw RGBA data, not 
premultiplied?


_______________________________________________
Mbsplugins_monkeybreadsoftware.info mailing list
mbsplugins@monkeybreadsoftware.info
https://ml01.ispgateway.de/mailman/listinfo/mbsplugins_monkeybreadsoftware.info

Reply via email to