OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkBitmap.h" | 8 #include "SkBitmap.h" |
9 #include "SkBitmapCache.h" | 9 #include "SkBitmapCache.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
11 #include "SkData.h" | 11 #include "SkData.h" |
12 #include "SkImageEncoder.h" | 12 #include "SkImageEncoder.h" |
13 #include "SkImageGenerator.h" | 13 #include "SkImageGenerator.h" |
14 #include "SkImagePriv.h" | 14 #include "SkImagePriv.h" |
15 #include "SkImageShader.h" | 15 #include "SkImageShader.h" |
16 #include "SkImage_Base.h" | 16 #include "SkImage_Base.h" |
17 #include "SkNextID.h" | 17 #include "SkNextID.h" |
18 #include "SkPicture.h" | |
18 #include "SkPixelRef.h" | 19 #include "SkPixelRef.h" |
19 #include "SkPixelSerializer.h" | 20 #include "SkPixelSerializer.h" |
20 #include "SkReadPixelsRec.h" | 21 #include "SkReadPixelsRec.h" |
21 #include "SkString.h" | 22 #include "SkString.h" |
22 #include "SkSurface.h" | 23 #include "SkSurface.h" |
23 | 24 |
24 #if SK_SUPPORT_GPU | 25 #if SK_SUPPORT_GPU |
25 #include "GrTexture.h" | 26 #include "GrTexture.h" |
26 #include "GrContext.h" | 27 #include "GrContext.h" |
27 #include "SkImage_Gpu.h" | 28 #include "SkImage_Gpu.h" |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
143 } | 144 } |
144 | 145 |
145 return nullptr; | 146 return nullptr; |
146 } | 147 } |
147 | 148 |
148 SkData* SkImage::refEncoded() const { | 149 SkData* SkImage::refEncoded() const { |
149 GrContext* ctx = nullptr; // should we allow the caller to pass in a ctx? | 150 GrContext* ctx = nullptr; // should we allow the caller to pass in a ctx? |
150 return as_IB(this)->onRefEncoded(ctx); | 151 return as_IB(this)->onRefEncoded(ctx); |
151 } | 152 } |
152 | 153 |
153 SkImage* SkImage::NewFromEncoded(SkData* encoded, const SkIRect* subset) { | 154 sk_sp<SkImage> SkImage::MakeFromEncoded(sk_sp<SkData> encoded, const SkIRect* su bset) { |
154 if (nullptr == encoded || 0 == encoded->size()) { | 155 if (nullptr == encoded || 0 == encoded->size()) { |
155 return nullptr; | 156 return nullptr; |
156 } | 157 } |
157 SkImageGenerator* generator = SkImageGenerator::NewFromEncoded(encoded); | 158 SkImageGenerator* generator = SkImageGenerator::NewFromEncoded(encoded.get() ); |
158 return generator ? SkImage::NewFromGenerator(generator, subset) : nullptr; | 159 return SkImage::MakeFromGenerator(generator, subset); |
159 } | 160 } |
160 | 161 |
161 const char* SkImage::toString(SkString* str) const { | 162 const char* SkImage::toString(SkString* str) const { |
162 str->appendf("image: (id:%d (%d, %d) %s)", this->uniqueID(), this->width(), this->height(), | 163 str->appendf("image: (id:%d (%d, %d) %s)", this->uniqueID(), this->width(), this->height(), |
163 this->isOpaque() ? "opaque" : ""); | 164 this->isOpaque() ? "opaque" : ""); |
164 return str->c_str(); | 165 return str->c_str(); |
165 } | 166 } |
166 | 167 |
167 SkImage* SkImage::newSubset(const SkIRect& subset) const { | 168 sk_sp<SkImage> SkImage::makeSubset(const SkIRect& subset) const { |
168 if (subset.isEmpty()) { | 169 if (subset.isEmpty()) { |
169 return nullptr; | 170 return nullptr; |
170 } | 171 } |
171 | 172 |
172 const SkIRect bounds = SkIRect::MakeWH(this->width(), this->height()); | 173 const SkIRect bounds = SkIRect::MakeWH(this->width(), this->height()); |
173 if (!bounds.contains(subset)) { | 174 if (!bounds.contains(subset)) { |
174 return nullptr; | 175 return nullptr; |
175 } | 176 } |
176 | 177 |
177 // optimization : return self if the subset == our bounds | 178 // optimization : return self if the subset == our bounds |
178 if (bounds == subset) { | 179 if (bounds == subset) { |
179 return SkRef(const_cast<SkImage*>(this)); | 180 return sk_ref_sp(const_cast<SkImage*>(this)); |
180 } | 181 } |
181 return as_IB(this)->onNewSubset(subset); | 182 return as_IB(this)->onMakeSubset(subset); |
182 } | 183 } |
183 | 184 |
184 #if SK_SUPPORT_GPU | 185 #if SK_SUPPORT_GPU |
185 | 186 |
186 GrTexture* SkImage::getTexture() const { | 187 GrTexture* SkImage::getTexture() const { |
187 return as_IB(this)->peekTexture(); | 188 return as_IB(this)->peekTexture(); |
188 } | 189 } |
189 | 190 |
190 bool SkImage::isTextureBacked() const { return SkToBool(as_IB(this)->peekTexture ()); } | 191 bool SkImage::isTextureBacked() const { return SkToBool(as_IB(this)->peekTexture ()); } |
191 | 192 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
276 if (GrTextureToYUVPlanes(texture, sizes, planes, rowBytes, colorSpace)) { | 277 if (GrTextureToYUVPlanes(texture, sizes, planes, rowBytes, colorSpace)) { |
277 return true; | 278 return true; |
278 } | 279 } |
279 } | 280 } |
280 #endif | 281 #endif |
281 return SkRGBAToYUV(this, sizes, planes, rowBytes, colorSpace); | 282 return SkRGBAToYUV(this, sizes, planes, rowBytes, colorSpace); |
282 } | 283 } |
283 | 284 |
284 //////////////////////////////////////////////////////////////////////////////// /////////////////// | 285 //////////////////////////////////////////////////////////////////////////////// /////////////////// |
285 | 286 |
286 SkImage* SkImage::NewFromBitmap(const SkBitmap& bm) { | 287 sk_sp<SkImage> SkImage::MakeFromBitmap(const SkBitmap& bm) { |
287 SkPixelRef* pr = bm.pixelRef(); | 288 SkPixelRef* pr = bm.pixelRef(); |
288 if (nullptr == pr) { | 289 if (nullptr == pr) { |
289 return nullptr; | 290 return nullptr; |
290 } | 291 } |
291 | 292 |
292 #if SK_SUPPORT_GPU | 293 #if SK_SUPPORT_GPU |
293 if (GrTexture* tex = pr->getTexture()) { | 294 if (GrTexture* tex = pr->getTexture()) { |
294 SkAutoTUnref<GrTexture> unrefCopy; | 295 SkAutoTUnref<GrTexture> unrefCopy; |
295 if (!bm.isImmutable()) { | 296 if (!bm.isImmutable()) { |
296 tex = GrDeepCopyTexture(tex, SkBudgeted::kNo); | 297 tex = GrDeepCopyTexture(tex, SkBudgeted::kNo); |
297 if (nullptr == tex) { | 298 if (nullptr == tex) { |
298 return nullptr; | 299 return nullptr; |
299 } | 300 } |
300 unrefCopy.reset(tex); | 301 unrefCopy.reset(tex); |
301 } | 302 } |
302 const SkImageInfo info = bm.info(); | 303 const SkImageInfo info = bm.info(); |
303 return new SkImage_Gpu(info.width(), info.height(), bm.getGenerationID() , info.alphaType(), | 304 return sk_make_sp<SkImage_Gpu>(info.width(), info.height(), bm.getGenera tionID(), |
304 tex, SkBudgeted::kNo); | 305 info.alphaType(), tex, SkBudgeted::kNo); |
305 } | 306 } |
306 #endif | 307 #endif |
307 | 308 |
308 // This will check for immutable (share or copy) | 309 // This will check for immutable (share or copy) |
309 return SkNewImageFromRasterBitmap(bm); | 310 return SkMakeImageFromRasterBitmap(bm); |
310 } | 311 } |
311 | 312 |
312 bool SkImage::asLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode mode) const { | 313 bool SkImage::asLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode mode) const { |
313 return as_IB(this)->onAsLegacyBitmap(bitmap, mode); | 314 return as_IB(this)->onAsLegacyBitmap(bitmap, mode); |
314 } | 315 } |
315 | 316 |
316 bool SkImage_Base::onAsLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode mode) con st { | 317 bool SkImage_Base::onAsLegacyBitmap(SkBitmap* bitmap, LegacyBitmapMode mode) con st { |
317 // As the base-class, all we can do is make a copy (regardless of mode). | 318 // As the base-class, all we can do is make a copy (regardless of mode). |
318 // Subclasses that want to be more optimal should override. | 319 // Subclasses that want to be more optimal should override. |
319 SkImageInfo info = SkImageInfo::MakeN32(this->width(), this->height(), | 320 SkImageInfo info = SkImageInfo::MakeN32(this->width(), this->height(), |
320 this->isOpaque() ? kOpaque_SkAlphaType : kPr emul_SkAlphaType); | 321 this->isOpaque() ? kOpaque_SkAlphaType : kPr emul_SkAlphaType); |
321 if (!bitmap->tryAllocPixels(info)) { | 322 if (!bitmap->tryAllocPixels(info)) { |
322 return false; | 323 return false; |
323 } | 324 } |
324 if (!this->readPixels(bitmap->info(), bitmap->getPixels(), bitmap->rowBytes( ), 0, 0)) { | 325 if (!this->readPixels(bitmap->info(), bitmap->getPixels(), bitmap->rowBytes( ), 0, 0)) { |
325 bitmap->reset(); | 326 bitmap->reset(); |
326 return false; | 327 return false; |
327 } | 328 } |
328 | 329 |
329 if (kRO_LegacyBitmapMode == mode) { | 330 if (kRO_LegacyBitmapMode == mode) { |
330 bitmap->setImmutable(); | 331 bitmap->setImmutable(); |
331 } | 332 } |
332 return true; | 333 return true; |
333 } | 334 } |
334 | 335 |
335 SkImage* SkImage::NewFromPicture(const SkPicture* picture, const SkISize& dimens ions, | 336 sk_sp<SkImage> SkImage::MakeFromPicture(sk_sp<SkPicture> picture, const SkISize& dimensions, |
336 const SkMatrix* matrix, const SkPaint* paint) { | 337 const SkMatrix* matrix, const SkPaint* p aint) { |
337 if (!picture) { | 338 if (!picture) { |
338 return nullptr; | 339 return nullptr; |
339 } | 340 } |
340 return NewFromGenerator(SkImageGenerator::NewFromPicture(dimensions, picture , matrix, paint)); | 341 return MakeFromGenerator(SkImageGenerator::NewFromPicture(dimensions, pictur e.release(), |
f(malita)
2016/03/11 13:58:35
Yeah, I think this needs to be picture.get() as Sk
| |
342 matrix, paint)); | |
341 } | 343 } |
342 | 344 |
343 bool SkImage::isLazyGenerated() const { | 345 bool SkImage::isLazyGenerated() const { |
344 return as_IB(this)->onIsLazyGenerated(); | 346 return as_IB(this)->onIsLazyGenerated(); |
345 } | 347 } |
346 | 348 |
347 //////////////////////////////////////////////////////////////////////////////// ////// | 349 //////////////////////////////////////////////////////////////////////////////// ////// |
348 | 350 |
349 #if !SK_SUPPORT_GPU | 351 #if !SK_SUPPORT_GPU |
350 | 352 |
351 SkImage* SkImage::NewTextureFromPixmap(GrContext*, const SkPixmap&, SkBudgeted b udgeted) { | 353 sk_sp<SkImage> SkImage::MakeTextureFromPixmap(GrContext*, const SkPixmap&, SkBud geted budgeted) { |
352 return nullptr; | 354 return nullptr; |
353 } | 355 } |
354 | 356 |
355 SkImage* SkImage::NewFromTexture(GrContext*, const GrBackendTextureDesc&, SkAlph aType, | 357 sk_sp<SkImage> SkImage::MakeFromTexture(GrContext*, const GrBackendTextureDesc&, SkAlphaType, |
356 TextureReleaseProc, ReleaseContext) { | 358 TextureReleaseProc, ReleaseContext) { |
357 return nullptr; | 359 return nullptr; |
358 } | 360 } |
359 | 361 |
360 SkImage* SkImage::NewFromAdoptedTexture(GrContext*, const GrBackendTextureDesc&, SkAlphaType) { | 362 sk_sp<SkImage> SkImage::MakeFromAdoptedTexture(GrContext*, const GrBackendTextur eDesc&, |
363 SkAlphaType) { | |
361 return nullptr; | 364 return nullptr; |
362 } | 365 } |
363 | 366 |
364 SkImage* SkImage::NewFromTextureCopy(GrContext*, const GrBackendTextureDesc&, Sk AlphaType) { | 367 sk_sp<SkImage> SkImage::MakeFromTextureCopy(GrContext*, const GrBackendTextureDe sc&, SkAlphaType) { |
365 return nullptr; | 368 return nullptr; |
366 } | 369 } |
367 | 370 |
368 SkImage* SkImage::newTextureImage(GrContext*) const { | 371 sk_sp<SkImage> SkImage::MakeFromYUVTexturesCopy(GrContext* ctx, SkYUVColorSpace space, |
372 const GrBackendObject yuvTexture Handles[3], | |
373 const SkISize yuvSizes[3], | |
374 GrSurfaceOrigin origin) { | |
375 return nullptr; | |
376 } | |
377 | |
378 sk_sp<SkImage> SkImage::makeTextureImage(GrContext*) const { | |
369 return nullptr; | 379 return nullptr; |
370 } | 380 } |
371 | 381 |
372 #endif | 382 #endif |
383 | |
384 //////////////////////////////////////////////////////////////////////////////// /////////////////// | |
385 | |
386 #ifdef SK_SUPPORT_LEGACY_IMAGEFACTORY | |
387 SkImage* SkImage::NewRasterCopy(const Info& info, const void* pixels, size_t row Bytes, | |
388 SkColorTable* ctable) { | |
389 return MakeRasterCopy(SkPixmap(info, pixels, rowBytes, ctable)).release(); | |
390 } | |
391 | |
392 SkImage* SkImage::NewRasterData(const Info& info, SkData* pixels, size_t rowByte s) { | |
393 return MakeRasterData(info, sk_ref_sp(pixels), rowBytes).release(); | |
394 } | |
395 | |
396 SkImage* SkImage::NewFromRaster(const Info& info, const void* pixels, size_t row Bytes, | |
397 RasterReleaseProc proc, ReleaseContext releasect x) { | |
398 return MakeFromRaster(SkPixmap(info, pixels, rowBytes), proc, releasectx).re lease(); | |
399 } | |
400 | |
401 SkImage* SkImage::NewFromBitmap(const SkBitmap& bm) { | |
402 return MakeFromBitmap(bm).release(); | |
403 } | |
404 | |
405 SkImage* SkImage::NewFromGenerator(SkImageGenerator* gen, const SkIRect* subset) { | |
406 return MakeFromGenerator(gen, subset).release(); | |
407 } | |
408 | |
409 SkImage* SkImage::NewFromEncoded(SkData* encoded, const SkIRect* subset) { | |
410 return MakeFromEncoded(sk_ref_sp(encoded), subset).release(); | |
411 } | |
412 | |
413 SkImage* SkImage::NewFromTexture(GrContext* ctx, const GrBackendTextureDesc& des c, SkAlphaType at, | |
414 TextureReleaseProc proc, ReleaseContext release ctx) { | |
415 return MakeFromTexture(ctx, desc, at, proc, releasectx).release(); | |
416 } | |
417 | |
418 SkImage* SkImage::NewFromAdoptedTexture(GrContext* ctx, const GrBackendTextureDe sc& desc, | |
419 SkAlphaType at) { | |
420 return MakeFromAdoptedTexture(ctx, desc, at).release(); | |
421 } | |
422 | |
423 SkImage* SkImage::NewFromTextureCopy(GrContext* ctx, const GrBackendTextureDesc& desc, | |
424 SkAlphaType at) { | |
425 return MakeFromTextureCopy(ctx, desc, at).release(); | |
426 } | |
427 | |
428 SkImage* SkImage::NewFromYUVTexturesCopy(GrContext* ctx, SkYUVColorSpace space, | |
429 const GrBackendObject yuvTextureHandles [3], | |
430 const SkISize yuvSizes[3], | |
431 GrSurfaceOrigin origin) { | |
432 return MakeFromYUVTexturesCopy(ctx, space, yuvTextureHandles, yuvSizes, orig in).release(); | |
433 } | |
434 | |
435 SkImage* SkImage::NewFromPicture(const SkPicture* picture, const SkISize& dimens ions, | |
436 const SkMatrix* matrix, const SkPaint* paint) { | |
437 return MakeFromPicture(sk_ref_sp(const_cast<SkPicture*>(picture)), dimension s, | |
438 matrix, paint).release(); | |
439 } | |
440 | |
441 SkImage* SkImage::NewTextureFromPixmap(GrContext* ctx, const SkPixmap& pmap, SkB udgeted budgeted) { | |
442 return MakeTextureFromPixmap(ctx, pmap, budgeted).release(); | |
443 } | |
444 #endif | |
OLD | NEW |