[Delphi] Plaatje verkleinen tot schermresolutie

Pagina: 1
Acties:

  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 22:50

Klippy

Still Game

Topicstarter
Ik heb vanmiddag een vrij aardig programmatje gemaakt om foto's te bekijken. Heb wat digifoto's op CD gezet voor familie en dat progje start dus vanzelf op aan 't begin en laat fullscreen die plaatjes zien.

Maar nu heb ik nog 1 probleem: Als ik een plaatje heb groter dan de schermresolutie past 't er dus niet op.
Ik heb een Image component gebruikt om 't plaatje te laten zien.
Op die CD staan dus foto's op 640x480 en op 1280x960.
Nu wil ik dus die op 640x480 niet vergroten, maar die wat groter zijn wel verkleinen.
Is er een manier om dat vrij simpel te doen?

Ik dacht zelf al aan de resolutie van het scherm bepalen met Tmonitor ofzo, maar dan kan ik alleen de stretch optie gebruiken en word een plaatje van 960x1280 een beetje breed. Moet dus alleen de hoogte veranderen totdat hij gelijk is aan schermresolutie.
Ik had al geprobeerd om een library te downloaden maar die was 8MB en daar heb ik geen zin in om extra dingen te gaan downloaden.

Maar hoe kan ik het dan wel doen?

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik vermoed dat je even moet kijken voor welke kant het plaatje het meest verkleind moet worden: voor de breedte of de hoogte. Je neemt van deze twee schalen het maximum en stretched allebei de richtingen hiermee?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 15-09 17:44

Knutselsmurf

LED's make things better

Je moet de verhouding hoogte/breedte van je foto onthouden, evenals de hoogte/breedte verhouding van je monitor (TScreen). Daarmee kan je bepalen of de breedte van je plaatje schermvullend moet zijn en je de hoogte iets minder moet maken, of andersom. Ik heb de code hier liggen, kan ik eventueel morgen wel even posten.......

- This line is intentionally left blank -


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 22:50

Klippy

Still Game

Topicstarter
Bedankt zover, maar hoe kan ik dan het plaatje proportioneel veranderen van grootte in een Image component?

Ik zie 't morgen wel, ga eerst eens ff slapen :)

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:59

Creepy

Tactical Espionage Splatterer

code:
1
timage.stretch:=true;

Zo wordt het plaatje in je TImage altijd net zo groot getoond als de timage is. Dus gooi je TIMage net zo groot als je scherm, en tada.. elk plaatje is altijd net zo groot als je scherm. Dan natuurlijk wel alleen stretch op true zetten als je plaatje GROTER is dan je timage, en niet kleiner.

De verhouding van het plaatje is dan wel verneukt, maar je kan vrij makkelijk je TImage zo aanpassen dat ie qua verhouding klopt, en em dan zelf laten schalen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op vrijdag 25 januari 2002 08:34 schreef Creepy het volgende:
code:
1
timage.stretch:=true;

Zo wordt het plaatje in je TImage altijd net zo groot getoond als de timage is. Dus gooi je TIMage net zo groot als je scherm, en tada.. elk plaatje is altijd net zo groot als je scherm. Dan natuurlijk wel alleen stretch op true zetten als je plaatje GROTER is dan je timage, en niet kleiner.
als je het toch aan het uitleggen bent geef er dan meteen het volgende erbij:
code:
1
2
3
TImage.stretch:=True;
TImage.width:=Tscreen.width;
TImage.height:=Tscreen.height;

;)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:59

Creepy

Tactical Espionage Splatterer

Op vrijdag 25 januari 2002 08:46 schreef dusty het volgende:

[..]

als je het toch aan het uitleggen bent geef er dan meteen het volgende erbij:
code:
1
2
3
TImage.stretch:=True;
TImage.width:=Tscreen.width;
TImage.height:=Tscreen.height;

;)
je vergeet een
code:
1
2
3
TImage.top:=0;
TFormwaarTImageopstaat.borderstyle:=bsNone;
TFormwaarTimageopstaat.top:=0;

:z :)

En als je het echt goed wilt doen, geef je de code er ook nog bij om de verhoudingen van het plaatje goed te houden.. maar ja.. er moet wel wat overblijven om zelf over na te denken he :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Bovendien moet je niet TScreen maar Screen gebruiken.

Stretch property maakt trouwens hele lelijke plaatjes, Delphi laat gewoon een aantal pixels weg om te verkleinen en kopieert gewoon een aantal pixels om te vergroten. Ik weet niet hoe veel plaatjes je op CD hebt maar je zou bijvoorbeeld ook in verschillende formaten je plaatjes kunnen opslaan (bijv. 640x480, 800x600, 1024x768 en 1280x1024). Gebruik hier bijvoorbeeld PhotoShop of een ander pakket voor. Sla ze dan bijvoorbeeld op als JPEG (zodat je toch wat meer plaatjes op de CD kwijt kan) en gebruik de Delphi JPEG library om je plaatjes op het scherm te tekenen.

Wil je een mooi verkleind/vergroot plaatje zul je toch echt aan andere componenten moeten gaan denken aangezien heel veel details wegvallen als je de standaard TImage.Stretch gebruikt om te verkleinen.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op vrijdag 25 januari 2002 09:20 schreef hvdberg het volgende:
[..]
Wil je een mooi verkleind/vergroot plaatje zul je toch echt aan andere componenten moeten gaan denken aangezien heel veel details wegvallen als je de standaard TImage.Stretch gebruikt om te verkleinen.
Dat is bij elke verkleining het geval, echter bij andere functies voegen ze vaak een "soort blur" toe (gemiddelde waarde) waardoor wat verschillende pixels in elkaar gaan "overlopen" bij het verkleinen waardoor het beter lijkt.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Op vrijdag 25 januari 2002 09:56 schreef dusty het volgende:

[..]

Dat is bij elke verkleining het geval, echter bij andere functies voegen ze vaak een "soort blur" toe (gemiddelde waarde) waardoor wat verschillende pixels in elkaar gaan "overlopen" bij het verkleinen waardoor het beter lijkt.
Ok, mee eens, maar de standaard 'knip pixels weg'-methode geeft echt foeilelijke resultaten. Bovendien zijn er behoorlijk wat libs die niet alleen blurren maar ook nog kijken naar uitersten, bijv:
4 witte lijnen naast elkaar, 1 rode lijn, 2 witte lijnen.
Als je die zou verkleinen tot zeg 4 lijnen dan heb je kans dat de rode lijn wegvalt wat dus een zeer vertekend beeld zou geven. Beter is het om wat witte lijntjes weg te halen en 1 lijn rood met wit te blurren. Geeft een veel realistischer beeld wat me met foto's toch echt noodzakelijk lijkt!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:59

Creepy

Tactical Espionage Splatterer

Als je veel met graphics in Delphi aan het stoeien bent, kijk dan eens hier: http://www.efg2.com/Lab/Library/Delphi/Graphics/Color.htm

Veel objecten en source-code voor vanalles en nog wat, wat met graphics te maken heeft (kleuren, dithering, resizen, alpha blending etc. etc.)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 22:50

Klippy

Still Game

Topicstarter
Oke ik heb wat zitten spelen, maar ik snap het toch niet helemaal.

Ik heb nu een functie gemaakt die kijkt of het plaatje hoger is dan het form of dat het breder is.
Stel dat het plaatje hoger is, dan wil ik dus de hoogte veranderen naar form hoogte en de breedte proportioneel mee veranderen. Breedte veranderen heb ik gedaan door uit te rekenen wat de verhoudingen zijn van het originele plaatje.

Maar HOE kan ik nou de grootte daarvan echt veranderen? Dat snap ik dus niet.
Image1.picture.height = readonly. Als ik Image1.height verander word het vakje waarin het plaatje staat alleen kleiner en als ik stretch doe klopt de verhouding niet meer.....

Iemand nog een idee?

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:59

Creepy

Tactical Espionage Splatterer

Als je de verhouding weet, dan moet je dus de width en heigth van je TImage op aanpassen. (timage.height en timage.width dus).

Timage.picture.height readonly? Je hebt ook nog TImage.picture.bitmap.height.

Wat je ook kan doen is zelf een tbitmap aanmaken, en dan zelf de bitmap op het image tekenen
code:
1
2
3
4
5
6
7
8
9
var dummy: TBitmap;
begin
     dummy:=tbitmap.create;
     dummy.loadfromfile('c:\blaat.bmp');
     image1.height=screen.height;
     image1.width:= // verhouding hiero.
     image1.canvas.stretchdraw(0,0,dummy);
     dummy.free;
end

Zoiets dus.. is uit 'n hoofd en niet gecheckt. dus kunnen fouten inzitten.. maar het idee lijkt me duidelijk zo. Als de bitmap breeder is dan het scherm i.p.v. groter dan is natuurlijk image1.width:=screen.width en de height de verhouding.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 22:50

Klippy

Still Game

Topicstarter
Oke ik ga weer ff verder proberen.

Het probleem was dus dat ik in de image de properties zo had gezet dat de image altijd op de client uitgelijnd werd en daarom noit van size veranderde |:(

Maar nu gaat 't al beter :)

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO


  • Klippy
  • Registratie: Oktober 2000
  • Laatst online: 22:50

Klippy

Still Game

Topicstarter
Lukt al, merci :)

Hele functie gemaakt omt kijken of het plaatje hoger, breder of beide is etc.

Alleen nog een klein probleempje, maar dat lukt wel, merci ;)

Het probleem was dus gewoon dat ik het uitgelijnd had en autosize aan had staan....

Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO

Pagina: 1