xref: /haiku/src/apps/icon-o-matic/import_export/bitmap/BitmapExporter.cpp (revision 13581b3d2a71545960b98fefebc5225b5bf29072)
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