Naar content
Trending apps
  • Inbox by Gmail

  • Maps: Navigatie en OV

  • WhatsApp Messenger

  • Messenger

  • Facebook

Trending games
  • Dr. Mario World

  • Harry Potter: Wizards Unite

  • Breaking Bad: Criminal Elements

  • The Elder Scrolls: Blades

  • Ghostbusters World

Trending smartphones
  • Microsoft Surface Duo

  • OnePlus 7T Pro

  • Nokia 7.2

  • Xiaomi Mi 9T Pro

  • Samsung Galaxy Note 10 Plus

Nieuwste tablets
  • Samsung Galaxy Tab S6

  • Samsung Galaxy Tab A 10.5

  • Samsung Galaxy Tab S4

  • Samsung Galaxy Tab S3 9.7

  • Asus Zenpad 3S 10

tim687

tim687

  • Lid sinds 11 juli 2011
  • Berichten 418
  • Reputatie 0
  • #1
  • 17 augustus 2015
  • 17:33

Beste leden,

Omdat ik vanaf een server een afbeelding met een resolutie download die groter is als de maximale texture size van een android apparaat, heb ik een stukje code ontwikkelt die de afbeelding opsplitst in chunks. Dit werkt perfect, alleen het "hervormen" van de afbeelding werkt niet naar behoren.

Dit is de code van het " hervormen"

// Omdat bepaalde waardes die bij het hervormen gebruikt worden niet veranderen heb ik deze al in de setup berekend:

if (widthPieces * chunkWidth <= canvasWidth && heightPieces * chunkHeight<= canvasHeight) {
scale = 1.0f;
} else {
scale = Math.min((float) canvasWidth / (float) (widthPieces * chunkWidth),
(float) canvasHeight / (float) (heightPieces * chunkHeight));
}
offsetX = ((canvasWidth - bitmapWidth)* scale) / 2;
offsetY = ((canvasHeight - bitmapHeight) * scale) / 2;


/**
*
* @param canvas The canvas that needs to be written to
* @param matrix Optional matrix to draw the bitmap
* @param paint Optional paint to draw the bitmap
* @return the canvas that has been written to
*/
public Canvas writeBitmapsToCanvas(Canvas canvas, Matrix matrix, @Nullable Paint paint){

for(int x =0; x < widthPieces; x++){
for(int y =0; y < heightPieces; y++){
// Scale the canvas to make sure that the image fits. Code copied from the ImageView class but heavily edited

matrix.postTranslate((x * chunkWidth * scale) + offsetX, (y * chunkHeight * scale) + offsetY);

matrix.preScale(scale, scale);

// End scaling and positioning

canvas.drawBitmap(bitmaps[x][y], matrix, paint);

}
}


Log.d("TooLargeBitmap", "Bitmaps written to the canvas!");
return canvas;

}

Wat het gekke is, is dat als ik de canvas.drawBitmap buiten beide for statments haal en van

canvas.drawBitmap(bitmaps[x][y], matrix, paint);
matrix.postTranslate((x * chunkWidth * scale) + offsetX, (y * chunkHeight * scale) + offsetY);

canvas.drawBitmap(bitmaps[0][0], matrix, paint);
matrix.postTranslate((0 * chunkWidth * scale) + offsetX, (0 * chunkHeight * scale) + offsetY);
maakt.

Krijg ik keurig de eerste afbeelding op de plek waar ik hem wil hebben.

Maar als de waardes x en y in de for statments 0 zijn (dus hetzelfde als hierboven) komt de afbeelding niet op de goede plek.

Wie kan mij vertellen wat er fout gaat?

Moet ik ipv. postTranslate, preTranslate of setTranslate gebruiken??

Ik moet een matrix gebruiken omdat er een rotatie gedaan kan worden. Vandaar. Het gebruik van drawBitmap(mBitmap left, bottom, paint) is vele malen handiger, maar dit gaat helaas niet.

EDIT:

Hier zijn wat voorbeeld waardes:


bitmapHeight = 2160;
bitmapWidth = 4096;

widthPieces = 4;
heightPieces = 3;

chunkHeight = 1024;
chunkWidth = 720

canvasWidth = 720;
canvasHeight = 1280;

scale = 0,17578125;


Bedankt voor de reacties!

Tim

Bewerkt (17 augustus 2015 17:42)

Reageer

Om te reageren, dien je te zijn ingelogd. Druk op de onderstaande knop om in te loggen of maak een nieuwe account aan.

Inloggen Registreren