Nie wiem, czy można to zrobić przez zmianę wartości macierzy, ale to zdecydowanie powinien być możliwy przez filtrowanie subimage, ponieważ, zgodnie z dokumentacją BufferedImage.getSubimage()
:
Zwracany BufferedImage
akcji ta sama tablica danych co oryginalny obraz.
Więc oryginalnyBufferedImage
powinien zmienić z kodu:
BufferedImage image = /* ... */;
BufferedImage subImage = image.getSubimage(10, 20, 30, 40); // x, y, width, height
new ConvolveOp(new Kernel(20, 20, matrix), ConvolveOp.EDGE_NO_OP, null).filter(subImage, subImage);
Nie testowałem tego, choć i mogę sobie wyobrazić, że filter
nie działa zgodnie z oczekiwaniami, jeśli source
i destination
są takie same, w takim przypadku można użyć kopii subimage, korzystając z rozwiązania z this question:
BufferedImage image = /* ... */;
BufferedImage dest = image.getSubimage(10, 20, 30, 40); // x, y, width, height
ColorModel cm = dest.getColorModel();
BufferedImage src = new BufferedImage(cm, dest.copyData(dest.getRaster().createCompatibleWritableRaster()), cm.isAlphaPremultiplied(), null).getSubimage(0, 0, dest.getWidth(), dest.getHeight());
new ConvolveOp(new Kernel(20, 20, matrix), ConvolveOp.EDGE_NO_OP, null).filter(src, dest);
Po tym, kontynuować pracę z image
(niesubImage
, src
lub dest
!)
Nie mogę ci pomóc, powiedział, że jest po prostu chciałem, aby dostroić się i powiedzieć, że sprawa rzeczywiście nauczył mnie czegoś o splatanie obrazów i rozmycie, dzięki za to! :) –