/* * Copyright 2006, Haiku. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: * Stephan Aßmus */ #include "BitmapExporter.h" #include #include #include #include #include "Icon.h" #include "IconRenderer.h" #include "ReferenceImage.h" // constructor BitmapExporter::BitmapExporter(uint32 size) : Exporter(), fFormat(B_PNG_FORMAT), fSize(size) { } // destructor BitmapExporter::~BitmapExporter() { } // Export status_t BitmapExporter::Export(const Icon* icon, BPositionIO* stream) { if (fSize == 0) return B_NO_INIT; // render icon into bitmap with given size and transparent background uint32 bitmapFlags = 0; #if __HAIKU__ bitmapFlags |= B_BITMAP_NO_SERVER_LINK; #endif BBitmap bitmap(BRect(0, 0, fSize - 1, fSize - 1), bitmapFlags, B_RGBA32); status_t ret = bitmap.InitCheck(); if (ret < B_OK) return ret; IconRenderer renderer(&bitmap); renderer.SetIcon(icon); renderer.SetScale(fSize / 64.0); renderer.Render(false); // renderer.Demultiply(&bitmap); // save bitmap to translator BTranslatorRoster* roster = BTranslatorRoster::Default(); if (!roster) return B_ERROR; BBitmapStream bitmapStream(&bitmap); ret = roster->Translate(&bitmapStream, NULL, NULL, stream, fFormat, 0); BBitmap* dummy; bitmapStream.DetachBitmap(&dummy); return ret; } // MIMEType const char* BitmapExporter::MIMEType() { // TODO: ... return "image/png"; }