2017-09-25 2 views
-1

(Anmerkung: Ich kann keine Bibliothek benutzen, die direkt die Größe des Bildes, ich möchte wissen, die Core-Logik der Größenänderung) reduzierenWie die Bildgröße in java

Ich habe ein Graustufenbild mit den Abmessungen 256 * 256. Ich möchte es ändern und folgende drei Bilder erstellen a) Bild mit Abmessungen 128 * 128 b) Bild mit Abmessungen 64 * 64 c) Bild mit den Abmessungen 32 * 32.

Pseudocode

File fi = new File("E:\\input.raw"); 
byte[] fileContent = Files.readAllBytes(fi.toPath()); 

File fo= new File("E:\\output.raw"); 
FileOutputStream stream = new FileOutputStream(fo); 

int i=0; 
    for(;i<fileContent.length;i++){ 
    //dividing by 2 to create image with dimensions 128*128 
    fileContent[i]= (byte) ((fileContent[i])/2); 
    stream.write(fileContent[i]); 
    } 
    stream.close(); 

Above-Code nicht work.It mit 256 * 256 Dimensionen Bild erstellt. Aus irgendwelchen Gründen darf ich keine Bibliothek verwenden, die die Dimensionen direkt reduziert. Ich möchte wissen, wie kann ich 256 * 256 Bild zu 128 * 128 Dimensionen konvertieren?

+0

"aus irgendwelchen Gründen" folgt. Du meinst, das ist eine Art Interview oder Hausaufgabenfrage. Während Hausaufgaben hier erlaubt sind, müssen Sie zuerst Ihre Arbeit zeigen. Du hast im Grunde nichts geschrieben. Wenn das eine Interviewfrage ist, passt man nicht sehr gut zu diesem Ort. – Kayaman

+0

@Kayaman Ich habe Codeausschnitt meiner Arbeit in Frage gestellt. – sar

+1

Warum glauben Sie, dass die Aufteilung der Bytewerte irgendwie die * Größe * des Bildes beeinflusst? Das ergibt keinen Sinn. – Kayaman

Antwort

-1

Hope this

/** 
* scale image 
* 
* @param sbi image to scale 
* @param imageType type of image 
* @param dWidth width of destination image 
* @param dHeight height of destination image 
* @param fWidth x-factor for transformation/scaling 
* @param fHeight y-factor for transformation/scaling 
* @return scaled image 
*/ 
public static BufferedImage scale(BufferedImage sbi, int imageType, int dWidth, int dHeight, double fWidth, double fHeight) { 
    BufferedImage dbi = null; 
    if(sbi != null) { 
     dbi = new BufferedImage(dWidth, dHeight, imageType); 
     Graphics2D g = dbi.createGraphics(); 
     AffineTransform at = AffineTransform.getScaleInstance(fWidth, fHeight); 
     g.drawRenderedImage(sbi, at); 
    } 
    return dbi; 
} 
+0

* "Ich darf keine Bibliothek verwenden, die die Abmessungen direkt reduziert." * – Filburt

+1

Nun, er/sie kann immer in den Bibliotheken nachsehen, wie es funktioniert und selbst schreiben –

-1

Mit ImageIO und Graphics2D helfen wird, es kann getan werden, als

BufferedImage originalImage = ImageIO.read(new File("c:\\image\\test.jpg")); 
int[] dims = {128, 64, 32}; 

for(int dim : dims) { 
    BufferedImage resizedImage = new BufferedImage(dim, dim, type); 
    Graphics2D g = resizedImage.createGraphics(); 
    g.drawImage(originalImage, 0, 0, dim, dim, null); 
    g.dispose(); 
    ImageIO.write(resizeImageJpg, "jpg", new File("c:\\image\\test_" + dim + "x" + dim + ".jpg")); 
} 
+0

* "Ich darf nicht verwenden jede Bibliothek, die die Dimensionen direkt reduziert. "* – Filburt

+0

[ImageIO] (https://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageIO.html) und [Graphics2D] (https: // docs.oracle.com/javase/7/docs/api/java/awt/Graphics2D.html) sind interne Java-Bibliotheken nicht external –

+0

Bitte lesen Sie noch einmal mein Zitat - es bezieht sich nicht auf ** externe Bibliotheken ** aber Bibliotheken, die ** reduzieren Sie direkt die Abmessungen **. Es ist offensichtlich, dass das OP mit einer eher akademischen Anfrage beauftragt wurde, nur um zu zeigen, dass er das Problem lösen kann. Das OP hat sogar seinen Beitrag bearbeitet, um dies ausdrücklich zu unterstreichen. – Filburt