I am using DataTypes to load and scale the image and end up with this, which displays correctly:
Code: Select all
if (!(Img=IIntuition->NewObject(BitMapClass,NULL,
BITMAP_BitMap, ScaleBM,
BITMAP_Width, ScaleWidth,
BITMAP_Height, ScaleHeight,
BITMAP_HasAlpha, TRUE,
BITMAP_Screen, DefaultPubScreen,
BITMAP_Precision, PRECISION_EXACT,
BITMAP_Masking, TRUE,
TAG_DONE)))
Code: Select all
SaveBitMap(Img,ScaleWidth,ScaleHeight,"RAM:Scale.png");
BOOL
SaveBitMap(Object *Obj,uint32 Width,uint32 Height,STRPTR Dest)
{
Object *dto=NULL;
struct BitMapHeader *bmhd;
struct BitMap *BM=NULL;
if (!(dto = IDataTypes->NewDTObject(NULL,
DTA_SourceType,DTST_RAM,
// DTA_GroupID,GID_PICTURE,
DTA_BaseName,"png",
TAG_DONE)))
return(FALSE);
if (IDataTypes->GetDTAttrs(dto,
PDTA_BitMapHeader,&bmhd,
TAG_DONE))
{
bmhd->bmh_Left = 0;
bmhd->bmh_Top = 0;
bmhd->bmh_Width = Width;
bmhd->bmh_Height = Height;
bmhd->bmh_Depth = 32;
}
IDataTypes->SetDTAttrs(dto,NULL,NULL,
PDTA_SourceMode,PMODE_V43,
DTA_NominalHoriz,Width,
DTA_NominalVert,Height,
TAG_DONE);
IIntuition->GetAttrs(Obj,
BITMAP_BitMap, &BM,
TAG_DONE);
IIntuition->IDoMethod(dto, PDTM_WRITEPIXELARRAY, BM, PBPAFMT_ARGB, (Width*4)*Height, 0, 0, Width, Height);
if (IDataTypes->SaveDTObjectA(dto,NULL,NULL,Dest,
DTWM_RAW, FALSE,
NULL))
error=0;
else
error=IDOS->IoErr();
if (dto)
IDataTypes->DisposeDTObject(dto);
return(TRUE);
}
It saves it as a PNG.
What am I doing wrong?