Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Bitmap gedeeltelijk inladen

Pagina: 1
Acties:

  • ygma!l
  • Registratie: December 2002
  • Laatst online: 28-11 14:13
Ik maak gebruik van C# (.Net 2.0) en wil graag jpegs als bitmap inladen om deze vervolgens gedeeltelijk te vertonen. Het gaat om grote bestanden (6000x7500 pixels) wat veel geheugen zal gaan verbruiken op moment als ik het zal inladen als bitmap.

Nu ben ik opzoek gegaan op internet of er een manier is om een gedeelte van een afbeelding te kunnen inladen, maar ik heb niet iets bruikbaars kunnen vinden. Ik heb wel gevonden dat je bijvoorbeeld pixel voor pixel kan bekijken, maar dat kan pas als je de gehele afbeelding hebt geladen. En dit wil ik eigenlijk niet om zoveel mogelijk werkgeheugen te besparen.

De afbeeldingen moeten gedeeltelijk ingeladen worden en als de gebruiker bijvoorbeeld naar rechts gaat, moet het volgende stuk ingeladen worden. Dat is het idee. Puur om zoveel mogelijk werkgeheugen te besparen. Aangezien mijn schatting is dat een afbeelding van dit formaat als bitmap al snel 250mb geheugen ongeveer zal innemen, wat niet echt wenselijk is en daarnaast ook niet nodig. Aangezien de gebruiker ook niet in 1x de gehele afbeelding hoeft te zien.

Iemand die mij opweg kan helpen hiermee? Ik heb me wezeloos gezocht met google, maar waarschijnlijk niet met de juiste zoektermen... Ook begin ik sterk te twijfelen of GDI+ hier iets voor heeft...

  • DaRace
  • Registratie: Juni 2001
  • Laatst online: 03-10-2023
volgens mij red je dat niet met jpegs. Je moet dan overstappen op formaten die dit ondersteunen zoals jp2000 of mrSid

  • Swaptor
  • Registratie: Mei 2003
  • Laatst online: 15-10 19:25

Swaptor

Java Apprentice

Zoiets als dit, maar dan niet in Flash maar in C# bedoel je?

Het lijkt mij dan namelijk makkelijk om de plaatjes "gelaagd" aan te bieden, waar je dus verschillende versies op verschillende ingezoomde niveaus van hetzelfde beeld aanbied. Door deze gedeeltes geheel in te laden krijg je dus het gevoel dat je inzoomt.

Ontdek mij!
Proud NGS member
Stats-mod & forum-dude


  • ygma!l
  • Registratie: December 2002
  • Laatst online: 28-11 14:13
DaRace schreef op donderdag 01 november 2007 @ 14:11:
volgens mij red je dat niet met jpegs. Je moet dan overstappen op formaten die dit ondersteunen zoals jp2000 of mrSid
Worden deze formaten ondersteund door het .Net framework? (lees: GDI+)
Swaptor schreef op donderdag 01 november 2007 @ 14:11:
Zoiets als dit, maar dan niet in Flash maar in C# bedoel je?

Het lijkt mij dan namelijk makkelijk om de plaatjes "gelaagd" aan te bieden, waar je dus verschillende versies op verschillende ingezoomde niveaus van hetzelfde beeld aanbied. Door deze gedeeltes geheel in te laden krijg je dus het gevoel dat je inzoomt.
Ja, bijna zoiets. Het enige verschil is dat het in mijn geval continu op het zelfde zoom niveau (100%) moet blijven. Er hoeft dus niet gezoomed te worden. Dus lagen gaan ook niet werken dan denk ik.

  • DaRace
  • Registratie: Juni 2001
  • Laatst online: 03-10-2023
nee, niet native, dan moet je op zoek naar een externe bibliotheek. Kun je niet je plaatjes van te voren al in tiles (dambord van kleine jpegs als het ware) opknippen ? (of bij openen programma/plaatje)

[ Voor 50% gewijzigd door DaRace op 01-11-2007 14:19 ]


  • Adion
  • Registratie: Januari 2001
  • Laatst online: 18:53
DaRace schreef op donderdag 01 november 2007 @ 14:11:
volgens mij red je dat niet met jpegs. Je moet dan overstappen op formaten die dit ondersteunen zoals jp2000 of mrSid
jpeg maakt gebruik van blokjes van 8x8 pixels, dus als je je eigen jpeg decoder zou schrijven is het geen enkel probleem om enkel de blokjes te decoderen die je op dat moment nodig hebt.
De meeste standaard-implementaties zullen deze mogelijkheid waarschijnlijk niet bieden.
Indien mogelijk is het dus waarschijnlijk handiger als het grote bronbestand op voorhand al in een aantal losse bestanden kan genkipt worden, die je dan appart kan inladen en tonen zoals nodig.

VirtualDJ 2024 - Fast Image Resizer - Instagram


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
DaRace schreef op donderdag 01 november 2007 @ 14:11:
volgens mij red je dat niet met jpegs. Je moet dan overstappen op formaten die dit ondersteunen zoals jp2000 of mrSid
Nou... voor de mensen die de 28k8-tijd van het web nog mee hebben gemaakt ( :+ ), die kunnen zich misschien nog herinneren dat jpegs gelaagd ingeladen konden worden, mits ze volgens zgn. "progressive encoding" waren opgeslagen.

Zie o.m. dit en dit:
There is also an interlaced "Progressive JPEG" format, in which data is compressed in multiple passes of progressively higher detail. This is ideal for large images that will be displayed whilst downloading over a slow connection, allowing a reasonable preview before all the data has been retrieved. However, progressive JPEGs are not as widely supported.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Adion schreef op donderdag 01 november 2007 @ 15:35:
[...]

jpeg maakt gebruik van blokjes van 8x8 pixels, dus als je je eigen jpeg decoder zou schrijven is het geen enkel probleem om enkel de blokjes te decoderen die je op dat moment nodig hebt.
De meeste standaard-implementaties zullen deze mogelijkheid waarschijnlijk niet bieden.
Ik kan je uit eigen ervaring vertellen dat de reference JPG library behoorlijk flexibel is, en dit zonder meer toelaat (zie jpeg_read_scanlines). Scaling is bijvoorbeeld ook vrij simpel; elke factor 2 los je al op in de decompressie fase. Wat overblijft is een downscale tot hooguit 50%.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • ygma!l
  • Registratie: December 2002
  • Laatst online: 28-11 14:13
Allen, sorry voor mijn late reactie. Ik heb het opgelost om de JPEG van te voren in stukken op te hakken. Het was voor mij geen optie om zelf iets te schrijven waarmee ik de blokken van 8x8 kon inladen uit een JPEG.

Naar verdere research lijkt er in .Net 3.0 wel native support te zijn om een plaatje gedeeltelijk in te laden. Echter moest ik gebruik maken van .Net 2.0.
Pagina: 1