1 /* 2 * Copyright 2006, Haiku. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Stephan Aßmus <superstippi@gmx.de> 7 */ 8 9 #include "BitmapExporter.h" 10 11 #include <Bitmap.h> 12 #include <BitmapStream.h> 13 #include <TranslatorFormats.h> 14 #include <TranslatorRoster.h> 15 16 #include "Icon.h" 17 #include "IconRenderer.h" 18 #include "ReferenceImage.h" 19 20 21 // constructor 22 BitmapExporter::BitmapExporter(uint32 size) 23 : Exporter(), 24 fFormat(B_PNG_FORMAT), 25 fSize(size) 26 { 27 } 28 29 // destructor 30 BitmapExporter::~BitmapExporter() 31 { 32 } 33 34 // Export 35 status_t 36 BitmapExporter::Export(const Icon* icon, BPositionIO* stream) 37 { 38 if (fSize == 0) 39 return B_NO_INIT; 40 41 // render icon into bitmap with given size and transparent background 42 uint32 bitmapFlags = 0; 43 44 #if __HAIKU__ 45 bitmapFlags |= B_BITMAP_NO_SERVER_LINK; 46 #endif 47 48 BBitmap bitmap(BRect(0, 0, fSize - 1, fSize - 1), 49 bitmapFlags, B_RGBA32); 50 51 status_t ret = bitmap.InitCheck(); 52 if (ret < B_OK) 53 return ret; 54 55 IconRenderer renderer(&bitmap); 56 renderer.SetIcon(icon); 57 renderer.SetScale(fSize / 64.0); 58 renderer.Render(false); 59 // renderer.Demultiply(&bitmap); 60 61 // save bitmap to translator 62 BTranslatorRoster* roster = BTranslatorRoster::Default(); 63 if (!roster) 64 return B_ERROR; 65 66 BBitmapStream bitmapStream(&bitmap); 67 ret = roster->Translate(&bitmapStream, NULL, NULL, stream, fFormat, 0); 68 69 BBitmap* dummy; 70 bitmapStream.DetachBitmap(&dummy); 71 72 return ret; 73 } 74 75 // MIMEType 76 const char* 77 BitmapExporter::MIMEType() 78 { 79 // TODO: ... 80 return "image/png"; 81 } 82 83