03. marts 2003 - 13:28Der er
10 kommentarer og 1 løsning
Sammenligne 2 image
Hvordan sammenligner jeg to image objekter for at se om de repræsenterer det samme billede.
De er forskellige instanser så == eller equals går ikke.
De bliver hentet fra system clipboardet, men jeg har brug for at kunne holde løbende øje med om der kommer et nyt billede ind i clipboard. Fordi det hele tiden er nye instanser der hentes med clipboard.getContents(null).getTransferData(DataFlavor.imageFlavor); tror jeg at det nemmeste er at sammeligne billederne for at se om der er kommet et nyt til clipboard.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
har dette en jordisk chance for at virke? ideen er jo god nok. find ud af om de har samme pixelmap. public boolean compareImage(Image source, Image org, ImageObserver io) { int width = source.getWidth(io); int height = source.getHeight(io); if (width!=org.getWidth(io)&&height!=org.getHeight(io)) { // Vi skal bestemme os for om vi vil scalere og sammenligne // eller slet og ret erklære dem for ulig når der ikke // er samme højde og bredde return false; } else { // Øv da. Masser af arbejde. Skriv Image's pixels // ind i et array og sammenlign int[] pixels = new int[width*height*2]; PixelGrabber pg1 = new PixelGrabber( source, 0, 0, width, height, pixels, 0, width ); PixelGrabber pg2 = new PixelGrabber( org, 0, 0, width, height, pixels, width*height, width ); pg1.startGrabbing(); pg2.startGrabbing(); boolean retVal = true; int i= 0; while (retVal) { // sammenlign. retVal = (pixels[i]==pixels[width*height+i]); i++; } return retVal; } }
Efter jeg fandt ud af at det egentlig er et BufferedImage der returneres fra clipboardet fik jeg det til at virke ved at: hente billedets raster - BufferedImage.getData(); overfører til et array - Raster.getPixels(...); sammenligne nyt og gammelt pixel array - Arrays.equals(...);
// konstruer nyt int array til billede imageArray = new int[ (raster.getWidth()-raster.getMinX())* (raster.getHeight()-raster.getMinY())*raster.getNumDataElements()*5+1];
// overfør pixel data til arrayet imageArray = raster.getPixels(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight(), imageArray);
Det hele kører i en løkke, ens skulle hedde erEns og så meget andet.
=maddoq= jeg kunne ikke helt overskue din ide, du giver det samme array til pixel grabberen med samme start punkt. Da jeg forsøgte at bruge pixelgrabber blev PixelGrabber.getStatus() ved med at returnere 27 og getPixels kastede exception.
Der er vist fejl på eksperten, jeg får ingen tekst at se kun tomme rammer
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.