| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #include "SampleCode.h" | 8 #include "SampleCode.h" |
| 9 #include "SkView.h" | 9 #include "SkView.h" |
| 10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
| 11 #include "SkData.h" |
| 12 #include "SkDecodingImageGenerator.h" |
| 11 #include "SkGradientShader.h" | 13 #include "SkGradientShader.h" |
| 12 #include "SkGraphics.h" | 14 #include "SkGraphics.h" |
| 13 #include "SkImageDecoder.h" | 15 #include "SkImageDecoder.h" |
| 14 #include "SkImageEncoder.h" | 16 #include "SkImageEncoder.h" |
| 15 #include "SkPath.h" | 17 #include "SkPath.h" |
| 16 #include "SkRegion.h" | 18 #include "SkRegion.h" |
| 17 #include "SkShader.h" | 19 #include "SkShader.h" |
| 18 #include "SkUtils.h" | 20 #include "SkUtils.h" |
| 19 #include "SkXfermode.h" | 21 #include "SkXfermode.h" |
| 20 #include "SkColorPriv.h" | 22 #include "SkColorPriv.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 static const SkImageEncoder::Type gTypes[] = { | 98 static const SkImageEncoder::Type gTypes[] = { |
| 97 SkImageEncoder::kJPEG_Type, | 99 SkImageEncoder::kJPEG_Type, |
| 98 SkImageEncoder::kPNG_Type | 100 SkImageEncoder::kPNG_Type |
| 99 }; | 101 }; |
| 100 | 102 |
| 101 // must match up with gTypes[] | 103 // must match up with gTypes[] |
| 102 static const char* const gExt[] = { | 104 static const char* const gExt[] = { |
| 103 ".jpg", ".png" | 105 ".jpg", ".png" |
| 104 }; | 106 }; |
| 105 | 107 |
| 106 static const char* gPath = "/encoded/"; | |
| 107 | |
| 108 static void make_name(SkString* name, int config, int ext) { | |
| 109 name->set(gPath); | |
| 110 name->append(gConfigLabels[config]); | |
| 111 name->append(gExt[ext]); | |
| 112 } | |
| 113 | |
| 114 #include <sys/stat.h> | 108 #include <sys/stat.h> |
| 115 | 109 |
| 116 class EncodeView : public SampleView { | 110 class EncodeView : public SampleView { |
| 117 public: | 111 public: |
| 118 SkBitmap* fBitmaps; | 112 SkBitmap* fBitmaps; |
| 119 size_t fBitmapCount; | 113 SkAutoDataUnref* fEncodedPNGs; |
| 114 SkAutoDataUnref* fEncodedJPEGs; |
| 115 size_t fBitmapCount; |
| 120 | 116 |
| 121 EncodeView() { | 117 EncodeView() { |
| 122 #if 1 | 118 #if 1 |
| 123 (void)mkdir(gPath, S_IRWXU | S_IRWXG | S_IRWXO); | |
| 124 | |
| 125 fBitmapCount = SK_ARRAY_COUNT(gConfigs); | 119 fBitmapCount = SK_ARRAY_COUNT(gConfigs); |
| 126 fBitmaps = new SkBitmap[fBitmapCount]; | 120 fBitmaps = new SkBitmap[fBitmapCount]; |
| 121 fEncodedPNGs = new SkAutoDataUnref[fBitmapCount]; |
| 122 fEncodedJPEGs = new SkAutoDataUnref[fBitmapCount]; |
| 127 for (size_t i = 0; i < fBitmapCount; i++) { | 123 for (size_t i = 0; i < fBitmapCount; i++) { |
| 128 make_image(&fBitmaps[i], gConfigs[i], i); | 124 make_image(&fBitmaps[i], gConfigs[i], i); |
| 129 | 125 |
| 130 for (size_t j = 0; j < SK_ARRAY_COUNT(gExt); j++) { | 126 for (size_t j = 0; j < SK_ARRAY_COUNT(gTypes); j++) { |
| 131 SkString path; | 127 SkAutoTDelete<SkImageEncoder> codec( |
| 132 make_name(&path, i, j); | 128 SkImageEncoder::Create(gTypes[j])); |
| 133 | 129 if (NULL == codec.get()) { |
| 134 // remove any previous run of this file | 130 SkDebugf("[%s:%d] failed to encode %s%s\n", |
| 135 remove(path.c_str()); | 131 __FILE__, __LINE__,gConfigLabels[i], gExt[j]); |
| 136 | 132 continue; |
| 137 SkImageEncoder* codec = SkImageEncoder::Create(gTypes[j]); | |
| 138 if (NULL == codec || | |
| 139 !codec->encodeFile(path.c_str(), fBitmaps[i], 100)) { | |
| 140 SkDebugf("------ failed to encode %s\n", path.c_str()); | |
| 141 remove(path.c_str()); // remove any partial file | |
| 142 } | 133 } |
| 143 delete codec; | 134 SkAutoDataUnref data(codec->encodeData(fBitmaps[i], 100)); |
| 135 if (NULL == data.get()) { |
| 136 SkDebugf("[%s:%d] failed to encode %s%s\n", |
| 137 __FILE__, __LINE__,gConfigLabels[i], gExt[j]); |
| 138 continue; |
| 139 } |
| 140 if (SkImageEncoder::kJPEG_Type == gTypes[j]) { |
| 141 fEncodedJPEGs[i].reset(data.detach()); |
| 142 } else if (SkImageEncoder::kPNG_Type == gTypes[j]) { |
| 143 fEncodedPNGs[i].reset(data.detach()); |
| 144 } |
| 144 } | 145 } |
| 145 } | 146 } |
| 146 #else | 147 #else |
| 147 fBitmaps = NULL; | 148 fBitmaps = NULL; |
| 148 fBitmapCount = 0; | 149 fBitmapCount = 0; |
| 149 #endif | 150 #endif |
| 150 this->setBGColor(0xFFDDDDDD); | 151 this->setBGColor(0xFFDDDDDD); |
| 151 } | 152 } |
| 152 | 153 |
| 153 virtual ~EncodeView() { | 154 virtual ~EncodeView() { |
| 154 delete[] fBitmaps; | 155 delete[] fBitmaps; |
| 156 delete[] fEncodedPNGs; |
| 157 delete[] fEncodedJPEGs; |
| 155 } | 158 } |
| 156 | 159 |
| 157 protected: | 160 protected: |
| 158 // overrides from SkEventSink | 161 // overrides from SkEventSink |
| 159 virtual bool onQuery(SkEvent* evt) { | 162 virtual bool onQuery(SkEvent* evt) { |
| 160 if (SampleCode::TitleQ(*evt)) { | 163 if (SampleCode::TitleQ(*evt)) { |
| 161 SampleCode::TitleR(evt, "ImageEncoder"); | 164 SampleCode::TitleR(evt, "ImageEncoder"); |
| 162 return true; | 165 return true; |
| 163 } | 166 } |
| 164 return this->INHERITED::onQuery(evt); | 167 return this->INHERITED::onQuery(evt); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 180 | 183 |
| 181 for (size_t i = 0; i < fBitmapCount; i++) { | 184 for (size_t i = 0; i < fBitmapCount; i++) { |
| 182 canvas->drawText(gConfigLabels[i], strlen(gConfigLabels[i]), | 185 canvas->drawText(gConfigLabels[i], strlen(gConfigLabels[i]), |
| 183 x + SkIntToScalar(fBitmaps[i].width()) / 2, 0, | 186 x + SkIntToScalar(fBitmaps[i].width()) / 2, 0, |
| 184 paint); | 187 paint); |
| 185 y = paint.getTextSize(); | 188 y = paint.getTextSize(); |
| 186 | 189 |
| 187 canvas->drawBitmap(fBitmaps[i], x, y); | 190 canvas->drawBitmap(fBitmaps[i], x, y); |
| 188 | 191 |
| 189 SkScalar yy = y; | 192 SkScalar yy = y; |
| 190 for (size_t j = 0; j < SK_ARRAY_COUNT(gExt); j++) { | 193 for (size_t j = 0; j < SK_ARRAY_COUNT(gTypes); j++) { |
| 191 yy += SkIntToScalar(fBitmaps[i].height() + 10); | 194 yy += SkIntToScalar(fBitmaps[i].height() + 10); |
| 192 | 195 |
| 193 SkBitmap bm; | 196 SkBitmap bm; |
| 194 SkString name; | 197 SkData* encoded = NULL; |
| 195 | 198 if (SkImageEncoder::kJPEG_Type == gTypes[j]) { |
| 196 make_name(&name, i, j); | 199 encoded = fEncodedJPEGs[i].get(); |
| 197 | 200 } else if (SkImageEncoder::kPNG_Type == gTypes[j]) { |
| 198 SkImageDecoder::DecodeFile(name.c_str(), &bm); | 201 encoded = fEncodedPNGs[i].get(); |
| 199 canvas->drawBitmap(bm, x, yy); | 202 } |
| 203 if (encoded) { |
| 204 if (!SkInstallDiscardablePixelRef( |
| 205 SkDecodingImageGenerator::Create(encoded, |
| 206 SkDecodingImageGenerator::Options()), |
| 207 &bm, NULL)) { |
| 208 SkDebugf("[%s:%d] failed to decode %s%s\n", |
| 209 __FILE__, __LINE__,gConfigLabels[i], gExt[j]); |
| 210 } |
| 211 canvas->drawBitmap(bm, x, yy); |
| 212 } |
| 200 } | 213 } |
| 201 | 214 |
| 202 x += SkIntToScalar(fBitmaps[i].width() + SPACER); | 215 x += SkIntToScalar(fBitmaps[i].width() + SPACER); |
| 203 if (x > maxX) { | 216 if (x > maxX) { |
| 204 maxX = x; | 217 maxX = x; |
| 205 } | 218 } |
| 206 } | 219 } |
| 207 | 220 |
| 208 y = (paint.getTextSize() + SkIntToScalar(fBitmaps[0].height())) * 3 / 2; | 221 y = (paint.getTextSize() + SkIntToScalar(fBitmaps[0].height())) * 3 / 2; |
| 209 x = maxX + SkIntToScalar(10); | 222 x = maxX + SkIntToScalar(10); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 222 } | 235 } |
| 223 | 236 |
| 224 private: | 237 private: |
| 225 typedef SampleView INHERITED; | 238 typedef SampleView INHERITED; |
| 226 }; | 239 }; |
| 227 | 240 |
| 228 ////////////////////////////////////////////////////////////////////////////// | 241 ////////////////////////////////////////////////////////////////////////////// |
| 229 | 242 |
| 230 static SkView* MyFactory() { return new EncodeView; } | 243 static SkView* MyFactory() { return new EncodeView; } |
| 231 static SkViewRegister reg(MyFactory); | 244 static SkViewRegister reg(MyFactory); |
| OLD | NEW |