[.NET C#] pocket pc image outofmemory

Pagina: 1
Acties:

  • klaasopurk
  • Registratie: Februari 2004
  • Laatst online: 18-05 09:02
[huidig]

ik heb een jpg van 5150x6400 pixels

dit JPG wil ik in de pocket pc laden in een bitmap. dit kan door

Bitmap aa = new Bitmap("plaatje.jpg");

bij het laden krijg ik echter een outofmemoryexception. dit is opzich niet zo vreemd. want een bitmap in .NET heeft dan geen compressie. er dus geen ruimte meer voor het plaatje.

dit bitmapje moet dan in een picturebox komen in een applicatie. daarbij moet er mee gezoomed en zo worden. dit kan allemaal wel met kleinere plaatjes.

[probleemvraag]

is er een mogelijkheid om dit jpg wel te laden zonder de outofmemoryexceptie. het geeft niet als de kwaliteit achteruit gaat. want het komt toch in een klein schermpje terrecht.
tevens of iemand dan weet of je een klein stukje van een JPG kan laden in een bepaalde kwaliteit/grootte. dan wordt er namelijk ook minder geheugen gebruikt.

Klaas


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-05 09:50

pjvandesande

GC.Collect(head);

Als je een JPG laad, word deze intern ook een bitmap met dezelfde grootte. Je zou hem wel kunnen inladen in verschillende rectangles. Dus de voledig uitgezoomde bitmap hoeft geen resolutie van 5150x6400 te hebben.

  • klaasopurk
  • Registratie: Februari 2004
  • Laatst online: 18-05 09:02
questa schreef op maandag 15 november 2004 @ 16:24:
Als je een JPG laad, word deze intern ook een bitmap met dezelfde grootte. Je zou hem wel kunnen inladen in verschillende rectangles. Dus de voledig uitgezoomde bitmap hoeft geen resolutie van 5150x6400 te hebben.
ik heb rondgekeken hoe ik dan een plaatje in een rectangle kan laden, maar dit kan ik niet vinden.
tevens krijg ik dan een probleem met zoomen. want dan moet ik eigenlijk een klein stukje van de JPG hebben, en dus niet helemaal want dan ik dus bij inzoomen weer een steeds groter geheugengebied nodig.

Klaas


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-05 09:50

pjvandesande

GC.Collect(head);

Bij het zoemen dispose je de vorige image en laad je een nieuwe image. Je kan hiermee wat geheugen besparen. Maar dit is maar een voorstel.

Je kan geheugen besparender beter werken met meerderen plaatjes van een lageren resolutie en deze iedere keer laden of juist disposen.

Ik bedoelde niet openen in een rectangle, maar er een rectangle uitpakken en dan de rest disposen.

Ik vind in 1x een plaatje van 5150x6400 voor een pocket PC behoorlijk heftig, zeker als je dit nog wilt bewerken etc. En vergeet niet dat je met Zoom niet meer nodig hebt dan dat je ziet.

  • klaasopurk
  • Registratie: Februari 2004
  • Laatst online: 18-05 09:02
questa schreef op maandag 15 november 2004 @ 16:42:
Ik bedoelde niet openen in een rectangle, maar er een rectangle uitpakken en dan de rest disposen.
dit krijg ik dus niet voor elkaar. ik vind geen functie zodat ik maar een stukje kan laden. weet jij dit ergens te vinden in een voorbeeld of zo. ik vind als enige eerst plaatje in een bitmap-object stoppen en dan een stukje eruit halen. maar dit kan al niet ivm de grootte.

tevens is het een plattegrond van en gebouw. aan de hand van deze plattegrond moeten monteurs een hokje kunnen vinden. vandaar dat het plaatje groot is en er zoom en zo opzit. trouwens ook een search voor hokjenummer. maar dat terzijde.

Klaas


Verwijderd

Mijn eerste ingeving bij de vraag om een jpg van 5150x6400 pixels in een pocket pc te laden is "niet doen". Dit roept bij mij het gevoel op van forceren voor iets waar het niet voor bedoeld is. Kun je niet eerst op een pc de resolutie verlagen naar een redelijke grootte?

Gaat het om een foto - is ieder detail van de foto belangrijk? Of gaat het om een afbeelding die wellicht beter in een vectorgeoriënteerd formaat gegoten kan worden?

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-05 09:50

pjvandesande

GC.Collect(head);

Daarom is het niet slim om 1 plaatje van 5150x6400 pixels te laden. Split dit eerst is op en ga er dan is mee aan de gang. Voor een totaal uitgezoomed plaatje gebruik dan een plaatje met de scherm resolutie.

Verwijderd

klaasopurk schreef op maandag 15 november 2004 @ 16:47:
[...]

tevens is het een plattegrond van en gebouw. aan de hand van deze plattegrond moeten monteurs een hokje kunnen vinden. vandaar dat het plaatje groot is en er zoom en zo opzit. trouwens ook een search voor hokjenummer. maar dat terzijde.
Ik zou zelf denken richting SVG.

Trouwens, sowieso, als het gaat om een kaartje, zou je dan wel een lossy compression formaat als JPG gebruiken? Niet liever PNG (of evt. GIF als je niet anders kunt)?

[ Voor 18% gewijzigd door Verwijderd op 15-11-2004 16:58 . Reden: Toevoeging PNG ]


  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 17:51
misschien domme suggestie hoor maar is het niet een idee om het grote (uitgezoomde plaatje) plaatje te verkleinen naar de resolutie van de pocketpc, en dan voor het zoomen verschillende gezoomde niveau's te maken?

dus zoom niveau 1 = 200% (reso pda * 200)
zoom niveau 2 = 400% ( reso pda * 400)
zoom 3 = 800% (reso pda * 800)

je kan dan eventueel de ingezoomde plaatjes ook nog opdelen in stukjes ter grootte van het scherm van de pda, ze allemaal een x en y coordinaat geven, en ze dan naast elkaar zetten bij het zoomen, op die manier hoef je maar max 4 plaatjes (in hoeken van de plaatjes) ter grootte van de reso van de PDA in te laden, zo bespaar je dus aardig wat geheugen lijkt me.

Dit verzin ik even ter plekke dus kan net zo goed onzin zijn hoor...

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 18-05 09:50

pjvandesande

GC.Collect(head);

Dit bedoelde ik idd met het opsplitsen van de plaatjes, alleen questa is weer is onduidelijk. Bedankt Ramon de Jesus! O-)

  • klaasopurk
  • Registratie: Februari 2004
  • Laatst online: 18-05 09:02
thanks everybody.

ik zal wel op deze manier aan het werk gaan. een paar verschillende afbeeldingen maken van het zoomniveau.

overigs is het niet altijd een plaatje van een plattegrond. dus vandaar dat het SVG niet van toepassing is.

Klaas

Pagina: 1