OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/frame/ImageBitmap.h" | 5 #include "core/frame/ImageBitmap.h" |
6 | 6 |
| 7 #include "core/html/Float32ImageData.h" |
7 #include "core/html/HTMLCanvasElement.h" | 8 #include "core/html/HTMLCanvasElement.h" |
8 #include "core/html/HTMLVideoElement.h" | 9 #include "core/html/HTMLVideoElement.h" |
9 #include "core/html/ImageData.h" | 10 #include "core/html/ImageData.h" |
10 #include "core/offscreencanvas/OffscreenCanvas.h" | 11 #include "core/offscreencanvas/OffscreenCanvas.h" |
11 #include "platform/graphics/skia/SkiaUtils.h" | 12 #include "platform/graphics/skia/SkiaUtils.h" |
12 #include "platform/image-decoders/ImageDecoder.h" | 13 #include "platform/image-decoders/ImageDecoder.h" |
13 #include "third_party/skia/include/core/SkCanvas.h" | 14 #include "third_party/skia/include/core/SkCanvas.h" |
14 #include "third_party/skia/include/core/SkImageInfo.h" | 15 #include "third_party/skia/include/core/SkImageInfo.h" |
15 #include "third_party/skia/include/core/SkSurface.h" | 16 #include "third_party/skia/include/core/SkSurface.h" |
16 #include "wtf/CheckedNumeric.h" | 17 #include "wtf/CheckedNumeric.h" |
(...skipping 733 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
750 resizedInfo, resizedPixels->data(), | 751 resizedInfo, resizedPixels->data(), |
751 static_cast<unsigned>(resizeWidth) * resizedInfo.bytesPerPixel()); | 752 static_cast<unsigned>(resizeWidth) * resizedInfo.bytesPerPixel()); |
752 skImage->scalePixels(pixmap, resizeQuality); | 753 skImage->scalePixels(pixmap, resizeQuality); |
753 return SkImage::MakeFromRaster(pixmap, | 754 return SkImage::MakeFromRaster(pixmap, |
754 [](const void*, void* pixels) { | 755 [](const void*, void* pixels) { |
755 static_cast<Uint8Array*>(pixels)->deref(); | 756 static_cast<Uint8Array*>(pixels)->deref(); |
756 }, | 757 }, |
757 resizedPixels.release().leakRef()); | 758 resizedPixels.release().leakRef()); |
758 } | 759 } |
759 | 760 |
| 761 // TODO(zakerinasab): Fix this and the constructor from Float32ImageData |
| 762 // when the CL for Float32ImageData landed. |
760 ImageBitmap::ImageBitmap(ImageData* data, | 763 ImageBitmap::ImageBitmap(ImageData* data, |
761 Optional<IntRect> cropRect, | 764 Optional<IntRect> cropRect, |
762 const ImageBitmapOptions& options) { | 765 const ImageBitmapOptions& options) { |
763 // TODO(xidachen): implement the resize option | 766 // TODO(xidachen): implement the resize option |
764 IntRect dataSrcRect = IntRect(IntPoint(), data->size()); | 767 IntRect dataSrcRect = IntRect(IntPoint(), data->size()); |
765 ParsedOptions parsedOptions = | 768 ParsedOptions parsedOptions = |
766 parseOptions(options, cropRect, data->bitmapSourceSize()); | 769 parseOptions(options, cropRect, data->bitmapSourceSize()); |
767 if (dstBufferSizeHasOverflow(parsedOptions)) | 770 if (dstBufferSizeHasOverflow(parsedOptions)) |
768 return; | 771 return; |
769 IntRect srcRect = cropRect ? intersection(parsedOptions.cropRect, dataSrcRect) | 772 IntRect srcRect = cropRect ? intersection(parsedOptions.cropRect, dataSrcRect) |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 SkPaint paint; | 901 SkPaint paint; |
899 paint.setFilterQuality(parsedOptions.resizeQuality); | 902 paint.setFilterQuality(parsedOptions.resizeQuality); |
900 SkRect dstDrawRect = | 903 SkRect dstDrawRect = |
901 SkRect::MakeWH(parsedOptions.resizeWidth, parsedOptions.resizeHeight); | 904 SkRect::MakeWH(parsedOptions.resizeWidth, parsedOptions.resizeHeight); |
902 surface->getCanvas()->drawImageRect(skImage, dstDrawRect, &paint); | 905 surface->getCanvas()->drawImageRect(skImage, dstDrawRect, &paint); |
903 skImage = surface->makeImageSnapshot(); | 906 skImage = surface->makeImageSnapshot(); |
904 } | 907 } |
905 m_image = StaticBitmapImage::create(std::move(skImage)); | 908 m_image = StaticBitmapImage::create(std::move(skImage)); |
906 } | 909 } |
907 | 910 |
| 911 ImageBitmap::ImageBitmap(Float32ImageData* data, |
| 912 Optional<IntRect> cropRect, |
| 913 const ImageBitmapOptions& options) {} |
| 914 |
908 ImageBitmap::ImageBitmap(ImageBitmap* bitmap, | 915 ImageBitmap::ImageBitmap(ImageBitmap* bitmap, |
909 Optional<IntRect> cropRect, | 916 Optional<IntRect> cropRect, |
910 const ImageBitmapOptions& options) { | 917 const ImageBitmapOptions& options) { |
911 RefPtr<Image> input = bitmap->bitmapImage(); | 918 RefPtr<Image> input = bitmap->bitmapImage(); |
912 if (!input) | 919 if (!input) |
913 return; | 920 return; |
914 ParsedOptions parsedOptions = parseOptions(options, cropRect, input->size()); | 921 ParsedOptions parsedOptions = parseOptions(options, cropRect, input->size()); |
915 if (dstBufferSizeHasOverflow(parsedOptions)) | 922 if (dstBufferSizeHasOverflow(parsedOptions)) |
916 return; | 923 return; |
917 | 924 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
982 const ImageBitmapOptions& options) { | 989 const ImageBitmapOptions& options) { |
983 return new ImageBitmap(offscreenCanvas, cropRect, options); | 990 return new ImageBitmap(offscreenCanvas, cropRect, options); |
984 } | 991 } |
985 | 992 |
986 ImageBitmap* ImageBitmap::create(ImageData* data, | 993 ImageBitmap* ImageBitmap::create(ImageData* data, |
987 Optional<IntRect> cropRect, | 994 Optional<IntRect> cropRect, |
988 const ImageBitmapOptions& options) { | 995 const ImageBitmapOptions& options) { |
989 return new ImageBitmap(data, cropRect, options); | 996 return new ImageBitmap(data, cropRect, options); |
990 } | 997 } |
991 | 998 |
| 999 ImageBitmap* ImageBitmap::create(Float32ImageData* data, |
| 1000 Optional<IntRect> cropRect, |
| 1001 const ImageBitmapOptions& options) { |
| 1002 return new ImageBitmap(data, cropRect, options); |
| 1003 } |
| 1004 |
992 ImageBitmap* ImageBitmap::create(ImageBitmap* bitmap, | 1005 ImageBitmap* ImageBitmap::create(ImageBitmap* bitmap, |
993 Optional<IntRect> cropRect, | 1006 Optional<IntRect> cropRect, |
994 const ImageBitmapOptions& options) { | 1007 const ImageBitmapOptions& options) { |
995 return new ImageBitmap(bitmap, cropRect, options); | 1008 return new ImageBitmap(bitmap, cropRect, options); |
996 } | 1009 } |
997 | 1010 |
998 ImageBitmap* ImageBitmap::create(PassRefPtr<StaticBitmapImage> image, | 1011 ImageBitmap* ImageBitmap::create(PassRefPtr<StaticBitmapImage> image, |
999 Optional<IntRect> cropRect, | 1012 Optional<IntRect> cropRect, |
1000 const ImageBitmapOptions& options) { | 1013 const ImageBitmapOptions& options) { |
1001 return new ImageBitmap(std::move(image), cropRect, options); | 1014 return new ImageBitmap(std::move(image), cropRect, options); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1095 void ImageBitmap::adjustDrawRects(FloatRect* srcRect, | 1108 void ImageBitmap::adjustDrawRects(FloatRect* srcRect, |
1096 FloatRect* dstRect) const {} | 1109 FloatRect* dstRect) const {} |
1097 | 1110 |
1098 FloatSize ImageBitmap::elementSize(const FloatSize&) const { | 1111 FloatSize ImageBitmap::elementSize(const FloatSize&) const { |
1099 return FloatSize(width(), height()); | 1112 return FloatSize(width(), height()); |
1100 } | 1113 } |
1101 | 1114 |
1102 DEFINE_TRACE(ImageBitmap) {} | 1115 DEFINE_TRACE(ImageBitmap) {} |
1103 | 1116 |
1104 } // namespace blink | 1117 } // namespace blink |
OLD | NEW |