(Canvas canvas, IRect target, IRect screen, float dpi)
| 119 | } |
| 120 | |
| 121 | public void drawPixels(Canvas canvas, IRect target, IRect screen, float dpi) { |
| 122 | target = target.intersect(screen); |
| 123 | if (target == null) return; |
| 124 | |
| 125 | if (target.getWidth() <= 20 || target.getHeight() <= 20) |
| 126 | return; |
| 127 | IRect inner = IRect.makeXYWH(target.getLeft() + 10, target.getTop() + 10, target.getWidth() - 20, target.getHeight() - 20); |
| 128 | if (inner == null) return; |
| 129 | |
| 130 | try (var bitmap = new Bitmap();) { |
| 131 | var srcInfo = ImageInfo.makeS32((int) (target.getWidth() * dpi), (int) (target.getHeight() * dpi), ColorAlphaType.OPAQUE); |
| 132 | bitmap.allocPixelsFlags(srcInfo, true); |
| 133 | if (canvas.readPixels(bitmap, (int) (target.getLeft() * dpi), (int) (target.getTop() * dpi))) { |
| 134 | var dstInfo = new ImageInfo((int) (inner.getWidth() * dpi), (int) (inner.getHeight() * dpi), ColorType.ARGB_4444, ColorAlphaType.UNPREMUL); |
| 135 | long rowBytes = dstInfo.getMinRowBytes(); |
| 136 | byte[] pixels = bitmap.readPixels(dstInfo, rowBytes, (int) (10 * dpi), (int) (10 * dpi)); |
| 137 | int bpp = dstInfo.getBytesPerPixel(); |
| 138 | |
| 139 | for (int i = 0; i < pixels.length / bpp / 2; ++i) { |
| 140 | for (int j = 0; j < bpp; ++j) { |
| 141 | int i1 = i * bpp + j; |
| 142 | int i2 = (pixels.length / bpp - i - 1) * bpp + j; |
| 143 | byte b = pixels[i1]; |
| 144 | pixels[i1] = pixels[i2]; |
| 145 | pixels[i2] = b; |
| 146 | } |
| 147 | } |
| 148 | |
| 149 | bitmap.installPixels(dstInfo, pixels, rowBytes); |
| 150 | bitmap.notifyPixelsChanged(); |
| 151 | try (var image = Image.makeRasterFromBitmap(bitmap.setImmutable());) { |
| 152 | canvas.drawImageRect(image, inner.toRect()); |
| 153 | } |
| 154 | } |
| 155 | } |
| 156 | |
| 157 | try(var stroke = new Paint().setColor(0xFFE5E5E5).setMode(PaintMode.STROKE).setStrokeWidth(1);) { |
| 158 | canvas.drawRect(target.toRect(), stroke); |
| 159 | } |
| 160 | } |
| 161 | |
| 162 | public void drawSubset(Canvas canvas, IRect target, IRect screen, float dpi) { |
| 163 | try (var src = new Bitmap(); |
no test coverage detected