overlay-Bilder in java
Ich hoffe, Sie können mir einige Ratschläge um mein problem zu lösen.
Ich muss überlagerung vieler Bilder auf eine Schaltfläche.aber das problem ist,
dies ist das Basis-image (zahn): (http://i.imgur.com/7tIcP.gif)
mein erstes Bild ist dieses:
http://i.imgur.com/FYuD8.gif
und dann lege ich diese:
http://i.imgur.com/mWz9c.gif
das erste Bild überlappt die zweite, so dass ich nur sehen kann, nur das zweite Bild...
vielleicht werden Sie mir sagen, eine Möglichkeit ist, ändern Sie die Reihenfolge des Bildes vor dem overlay, aber der Benutzer wählen, was wird das erste sein, vielleicht wollen einfach nur das erste Bild, aber in anderen Fällen, die Benutzer legen Sie die erste UND dann die zweite oder Umgekehrt...
mein code ist:
BufferedImage large=null;
large = ImageIO.read(new File("firstimage.gif"));
BufferedImage small=null;
small = ImageIO.read(new File("secondimage.gif"));
int w = Math.max(large.getWidth(), small.getWidth());
int h = Math.max(large.getHeight(), small.getHeight());
BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
//paint both images, preserving the alpha channels
Graphics g = combined.getGraphics();
g.drawImage(large, 0, 0, null);
g.drawImage(small, 0, 0, null);
ImageIO.write(combined, "PNG", new File("twoInOne.png"));
ImageIcon icon1 = new ImageIcon(combined);
jbutton1.setIcon(icon1);
Vielleicht ist ein format, das Bilder-Problem, oder mein code, aber ich bevorzuge, dass Sie Kerle können mir helfen, mit diesem problem, danke.
Nun habe ich meinen 3 Bildern: ich überspringen Sie die Basis-image (zahn -) Ursache ich dont denke, es wird das problem sein.
Wenn der Benutzer wünscht, sowohl, was soll geschehen? Wie sollte es Aussehen?
Freezerburn verstehen die objetive... das erste Bild muss die overlay-zweite Bild ohne overwirte das erste Bild...
mm... I rly dont get it... die links, die ich hatte gepostet werden nur die Beispiele... meine original-Bilder sind in .gif-format
Also die Teile von Bild 2, die nicht vollständig transparent (z.B. blau/rot was auch immer) sein soll halb-transparent?
InformationsquelleAutor Alejandro Cabano | 2013-01-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen, eine bestimmte Farbe transparent ist, können Sie iterieren über die Pixel eines
BufferedImage
oder verwenden Sie eine geeigneteLookupOp
. Für letztere finden Sie in den Artikeln zitiert hier. Anschließend können Sie kombinieren die Bilder mitdrawImage()
. Die Standard-composite-RegelAlphaComposite.SRC_OVER
, sollte befriedigend sein; wenn nicht, können Sie es ändern, wie gezeigt hier.InformationsquelleAutor trashgod
Ihr code sollte in Ordnung sein für das kombinieren der beiden Bilder miteinander. Allerdings, wie du schon gesagt hast, deine beiden Bilder sind von der gleichen Größe, und Sie nicht scheinen, um eine Transparenz. Dies wird Ursache, was Bild gezeichnet zweite immer "überschreiben" wird das erste Bild in der neu-kombinierten Bild.
Die Lösung, die Sie wahrscheinlich wollen für diese ist, brechen Sie die verschiedenen Stücke, die Sie überlagern möchten, auf der jeweils anderen, in separate, kleinere Bilder. Mit Ihren Bildern, es sieht aus wie Sie wollen, haben verschiedene overlays auf der Spitze eines Zahns zur Anzeige verschiedener Informationen. Sie wollen drei Dinge in diesem Fall: ein Bild von einem zahn, ein Bild mit dem roten overlay, und ein Bild mit den blauen overlay. Alle drei dieser Bilder haben sollte transparent und nicht weiß, hintergrund, so dass Sie nicht überschreiben die Farben in jede zuvor gezeichnete Bild. Wenn Sie dies tun, werden Sie wollen, ziehen Sie den zahn, dann overlay 1 (rot/blau), dann overlay 2 (rot/blau). Dies sollte erhalten Sie die Ausgabe, die du suchst.
Hängt davon ab, ob Sie Windows, Mac oder Linux. Sie brauchen, um ein Bild-editor, und entfernen Sie den weißen hintergrund, dann am besten speichern Sie Sie als PNG (das ermöglicht die Transparenz im Bild). Windows, die Sie verwenden können Paint.NET, Mac, die Sie verwenden können Meer, und das einzige Programm, ich weiß für Linux ist GIMP, das ist ein Photoshop-Ersatz, es ist also ziemlich kompliziert.
"in der Tat das problem ist die Bilder?" Sie behaupten, Sie sind GIF, die "alle oder keiner Transparenz". Die Bilder auf dieser Website sind JPEG, die keine Transparenz unterstützen in irgendeiner form. Es werden nur PNG-unterstützt teilweise die Transparenz und wäre geeignet, die direkt der Zeichnung ist eine über der anderen, um zu sehen, Teile aus beiden gleichzeitig. Vielleicht sollten Sie re-upload der Bilder auf imgur.com, damit wir sehen können, Sie richtig.
InformationsquelleAutor Freezerburn
Der Schlüssel ist, um das alpha zu einem float-Wert, sagen wir zwei-Schicht-set alpha von 0,5, drei-Schicht-set alpha 0.33, vier-Schicht-set alpha von 0,25 ... wie auch immer, hier ist das code-Beispiel
InformationsquelleAutor Ken Chan