Beräkna bildstorlek.

Hej
 
Nu har jag tänkt och vridit till en första funktion för att  beräkna Bitmap storlek efter Primfaktorisering av skärmens storlek, så att Bitmap bilden ska passa enligt 8, 16, 32, 64 o.s.v.
Behöver den för att visa en karta över rymden i mitt 3D spel jag utvecklar, som jag i tidigare blogginlägg har nämnt.
 
Här är hela testkoden i C#..
 
using System;
 
namespace TestAlgorithm
{
class Program
{
 
struct Returner
{
public int sBitmapW;
public int sBitmapH;
public int sPartSizeSumW;
public int sPartSizeSumH;
public int sPartSize;
public int sPartSizeExtraW;
public int sPartSizeExtraH;
}
 
static Returner calcImagePartSize(float scrW, float scrH)
{
int sizer = 256;
float decW = 0.999999999999f;
Returner ret = new Returner();
 
while (sizer > 8)
{
float decTestW = (scrW / sizer) - (int)(scrW / sizer);
 
// Check if this loop lap has either a great fit
// or if we need to add a halfsize extra part for better fit..
if (decTestW < decW && decTestW - 0.5 >= 0)
{
decW = (scrW / sizer) - (int)(scrW / sizer);
ret.sPartSize = sizer;
ret.sPartSizeExtraW = ret.sPartSize / 2;
ret.sPartSizeSumW = (int)(scrW / sizer);
ret.sPartSizeSumH = (int)(scrH / sizer);
}
// It's ok to use this sizer size..
else if (decTestW < decW && decTestW == 0)
{
decW = (scrW / sizer) - (int)(scrW / sizer);
ret.sPartSize = sizer;
ret.sPartSizeExtraW = 0;
ret.sPartSizeSumW = (int)(scrW / sizer);
ret.sPartSizeSumH = (int)(scrH / sizer);
}
 
float decTestH = (scrH / ret.sPartSize) - (int)(scrH / ret.sPartSize);
float searchSize = decTestH * ret.sPartSize;
 
if (searchSize >= sizer && searchSize < sizer * 2)
ret.sPartSizeExtraH = sizer;
 
// Time for next.. 256, 128, 64, 32..
sizer = sizer / 2;
}
 
ret.sBitmapW = (((int)scrW / ret.sPartSize) * ret.sPartSize) + ret.sPartSizeExtraW;
ret.sBitmapH = (((int)scrH / ret.sPartSize) * ret.sPartSize) + ret.sPartSizeExtraH;
 
return ret;
}
 
static void Main(string[] args)
{
int scrW = 1377;
int scrH = 894;
 
Returner ret = Program.calcImagePartSize(scrW, scrH);
 
int bitmapW = ret.sBitmapW;
int bitmapH = ret.sBitmapH;
Console.WriteLine("sPartSize: " + ret.sPartSize + " sPartSizeExtraW: " + ret.sPartSizeExtraW + " sPartSizeExtraH: " + ret.sPartSizeExtraH);
Console.WriteLine("Needs a Bitmap width: " + bitmapW + " on a screen width of: " + scrW + " pixels");
Console.WriteLine("Needs a Bitmap height: " + bitmapH + " on a screen height of: " + scrH + " pixels");
Console.WriteLine("ret.sPartSizeSumW: " + ret.sPartSizeSumW);
Console.WriteLine("ret.sPartSizeSumH: " + ret.sPartSizeSumH);
 
Console.ReadLine();
}
}
}
 
Den här koden kommer beräkna bästa tänkbara storlek på delarna för att bygga upp en bild i accepterade bitar. Här kommer bitmapW och bimapH visa på vilken storlek min Bitmap-karta ska ha innan jag delar ned den i bitarna för att rita ut på skärmen enligt ret's sPartSize och sPartSizeExtra.
 
Nu är det bara ta den till nästa steg och göra den effektivare för att implementera i mitt spel och översätta den till Java, vilket inte är så svårt.
 
Ses och hörs, lämna gärna en kommentar.

Kommentarer

Populära inlägg i den här bloggen

Lite ljud.

Monsterattack.

Skuggor.