2017-08-07 3 views
0

Ich arbeite in einigen Grafik-Programmierung in Java. Im Moment kann ich ein Bild skalieren, was ich in einem 1D-Array speicher. (es speichert Reihe für Reihe)Wie kann ich das Zentrum der Skalierung einstellen?

Mein Code mögen wo ist die neue Position? newpoz = (int)(x * scale) + (int)(y * scale) * width;

Dies gibt mir eine Position in der Anordnung. Aber es skaliert um die 0,0 Koordinate, was in der oberen linken Ecke ist. Wie kann ich es in die Mitte setzen, wenn der Bildschirm? Also zum screen.getWidth()/2; screen.getHeight()/2.

Demonstration

Jemand kann dabei helfen? Wenn es irgendeine Frage gibt, werde ich in den Kommentaren antworten.

Antwort

1

Pixel zu skalieren Koordinaten über einige Zentrum (a, b):

(x', y') = ([x - a] * scale + a, [y - b] * scale + b)

Fetch die ursprünglichen Pixeldaten pixelArray[y * width + x] wie bisher verwendet wird, und stellen Sie das Zielpixel in ähnlicher Weise mit den neuen Koordinaten.

BEARBEITEN: Sie können auch die bilineare Interpolation betrachten, da die aktuelle Rohmethode im fertigen Bild gezackte Kanten ergeben kann, wenn sie direkt verwendet wird.

+0

danke für deine antwort! – pocokknight

0

Wenn Sie zuerst das Zentrum des Bildes in (0,0) übersetzen, dann das Bild skalieren und das Bild zurückübersetzen, haben Sie das Bild effektiv mit der gewünschten Zentrierung skaliert.

  • x1 = x - SCREEN_WIDTH/2
  • x2 = x1 * scale
  • x3 = x2 + SCREEN_WIDTH/2

Dito für Y-Achse.

Mit ein wenig Mathe können Sie dies alles in einem Schritt tun. Übung links zum Schüler.

Aber wenn Sie in Schwierigkeiten geraten, posten Sie Ihren Versuch, und dann können wir Ihnen helfen, den Code zu beheben.

Verwandte Themen