AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi kein ZEichnen auf vergrößerten Image
Thema durchsuchen
Ansicht
Themen-Optionen

kein ZEichnen auf vergrößerten Image

Ein Thema von punker-lili · begonnen am 16. Jun 2008 · letzter Beitrag vom 24. Jun 2008
Antwort Antwort
Seite 2 von 3     12 3      
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

Re: kein ZEichnen auf vergrößerten Image

  Alt 16. Jun 2008, 22:26
Ich würde dir in diesem Fall zu einer Paintbox raten.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: kein ZEichnen auf vergrößerten Image

  Alt 17. Jun 2008, 00:23
Und ich zu einem TBitmap, dass, nachdem etwas daran geändert wurde, einer Bitmap-Property eines TImage assigned wird, bei dem AutoSize auf true gesetzt ist, welches sich in einer Scrollbox befindet.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
punker-lili

Registriert seit: 22. Apr 2007
91 Beiträge
 
#13

Re: kein ZEichnen auf vergrößerten Image

  Alt 21. Jun 2008, 10:13
Hi Leute!
Sry das meineAntwort solange gesdauert hat, hatte aber erst jetzt Zeit eure Tips zutesten. Also:
@ extrem: ich habs ausprobiert, es ändert nichts an dem Zustand. Ich habe bloß heruasgefunden, das dass Feld sich verkleinern lässt, also es funktioniert mit allen Werten, die kleiner als die voreingestellten sind.

Ich habs probiert auf nem anderen Ding zu zeichen, aber dann funktioniert mein ganzes Programm nicht mehr. Daher würde ich gern ne Lösung fürs image haben...
Also habt ihr noch ne Idee worans liegen kann?

MfG Anna
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#14

Re: kein ZEichnen auf vergrößerten Image

  Alt 21. Jun 2008, 10:56
Wie schon beschrieben, verwende bitte ein Bitmap. Ein Image ist nur ein
Graficcontainer und nicht als Zeichenfläche geeignet.

Erstelle dir ein Bitmap in deinem Prg. und zeichne darau was du möchtest.
Wenn es vergrössert/verkleinert werden muss kannst du dies über die
Bitmap .Width/.Height -Eigenschaften erledigen. Danach musst du alles neu
Zeichnen.

Wenn dies alles erledigt ist kannst du das Bitmap direkt über Canvas.Draw()
oder über ein Image auf deinem Formular anzeigen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
extrem

Registriert seit: 27. Mai 2008
72 Beiträge
 
#15

Re: kein ZEichnen auf vergrößerten Image

  Alt 21. Jun 2008, 13:16
Zitat von punker-lili:
Hi Leute!
Sry das meineAntwort solange gesdauert hat, hatte aber erst jetzt Zeit eure Tips zutesten. Also:
@ extrem: ich habs ausprobiert, es ändert nichts an dem Zustand. Ich habe bloß heruasgefunden, das dass Feld sich verkleinern lässt, also es funktioniert mit allen Werten, die kleiner als die voreingestellten sind.
Hi

Wenn ich auch die Breite und Höhe von Graphic vergrößert habe dann hat sich auch die Leinwand mit vergrößert. Habe es gerade noch mal anhand einer Demo ausprobiert:
Angehängte Dateien
Dateityp: zip image_938.zip (5,5 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#16

Re: kein ZEichnen auf vergrößerten Image

  Alt 21. Jun 2008, 14:21
Zitat von turboPASCAL:
Erstelle dir ein Bitmap in deinem Prg. und zeichne darau was du möchtest.
Wenn es vergrössert/verkleinert werden muss kannst du dies über die
Bitmap .Width/.Height -Eigenschaften erledigen. Danach musst du alles neu
Zeichnen.
siehe Hier im Forum suchenStretchBlt
Zitat von turboPASCAL:
Wenn dies alles erledigt ist kannst du das Bitmap direkt über Canvas.Draw()
oder über ein Image auf deinem Formular anzeigen.
lieber Hier im Forum suchenBitBlt im OnPaint, ist schneller.

die ganze Geschichte kannst du auch in ein TCustomControl packen, wo du im (überschriebenen) SetBounds das Bitmap-Resize und das StretchBlt machst (in separates Bitmap z.b. fBgBitmap, damit nicht bei jeder änderung resized werden muss). dann machst ne draw-Routine, wo der Hintergrund auf das eigentlich Offscreen-Bitmap (fBitmap) kopiert wird, deine eigenen Malroutinen aufgerufen werden und zum schluss Invalidate aufgerufen wird. jetzt must du nur noch in der (überschriebenen) Paint-Routine per BitBlt auf das canvas der Komponente kopieren.

so ist die Grundlage für meine selbstgemalten Controls (z.b. http://circuitboard.sf.net )

HTH Frank
  Mit Zitat antworten Zitat
punker-lili

Registriert seit: 22. Apr 2007
91 Beiträge
 
#17

Re: kein ZEichnen auf vergrößerten Image

  Alt 22. Jun 2008, 13:21
Danke Leute.. ich hoffe es klappt.
  Mit Zitat antworten Zitat
punker-lili

Registriert seit: 22. Apr 2007
91 Beiträge
 
#18

Re: kein ZEichnen auf vergrößerten Image

  Alt 23. Jun 2008, 21:03
Also die Idee mit dem TBitmap ist gut... aber so richtig nichts für mich^^
ich hab das mal von extrem ausrobiert und es entstand folgenser Quelltext:
Delphi-Quellcode:
procedure image_groesse(image:bild;hoehe,breite:integer);
var diff_x, diff_y: integer;
begin
//bestimmung_image_groesse(sd_hoehe,hoehe,breite,image);
 if assigned(image.picture.Graphic) then
 begin
 diff_x := breite - image.width;
 diff_y := hoehe - image.Height;

 if diff_x > 0 then begin
  image.width :=image.width + diff_x;
  image.picture.graphic.width:=image.Width;
 end
 else
  diff_x := 0;

 if diff_y > 0 then begin
  image.height := image.Height + diff_y;
  image.picture.graphic.height:=image.Height;
 end
 else
  diff_y := 0;

 image.canvas.Brush.Color := clred;
 image.Canvas.FillRect(rect(image.width - diff_x, image.Height - diff_y,
                            image.Width, image.height));
end;
end;
Leider passiert das, ab dem Punkt, wo das Image vergrößert werden müsste (s. Anhang).. Woran liegt das?
Angehängte Grafiken
Dateityp: bmp unbenannt_122.bmp (816,4 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#19

Re: kein ZEichnen auf vergrößerten Image

  Alt 23. Jun 2008, 21:58
ich frage mich grade, warum du erst die differenz ausrechnest und dann diese zu der aktuellen größe hinzuaddierst...
warum nicht einfach

Delphi-Quellcode:
if image.width<>breite then
  image.width:=breite;
if image.height<>hoehe then
  image.height:=hoehe;
image.graphic wird imho mit vergrößert, muss also nicht extra gemacht werden.

ich hab mal ne einfachere Version mit angehängt...was das Prinzip mal verdeutlicht und in bitBlt/stretchBlt einweist.

deine zeichenroutinen für die Noten musst du dann natürlich ins redraw reinhauen, bei Größenänderung LoadBGImage aufrufen, bei Notenänderung/erweiterung nur redraw.

wobei ich mich grade frage, warum du ein Hintergrundbild brauchst (wegen den linien?), was du relativ rechenintensiv strecken müsstest. die könntest auch malen

so in etwa:

Delphi-Quellcode:
for i:=1 to 5 do
begin
  canvas.moveTo(0,i*10);
  Canvas.LineTo(width,i*10);
end;
nicht viel Arbeit, oder?

//Edit
gut, man könnte das jetzt noch aufbohren und gleich mehrzeilig machen (wollte das jetzt einfach mal ausprobieren).

Delphi-Quellcode:
var i,j,y:integer;
const Ytop=20; //Abstand von oben
      YDiff=30; //abstand der zeilen
      LCount=5; //5 linien pro zeile
      LSpace=10; //Abstand der Linien in einer Zeile
      RowCount=5; //5 zeilen
begin
  for j:=0 to rowCount-1 do
  begin
    for i:=0 to LCount-1 do
    begin
      y:=Ytop+(j*YDiff)+(j*LCount*LSpace)+i*LSpace;
      canvas.moveTo(0,y);
      Canvas.LineTo(width,y);
    end;
  end;
end;
@extrem: klar, stimmt ja
aber ich kam noch nie auf die idee, das TGraphic-Objekt einer TImage-Kompo zu verändern war irgendwie gedanklich beim canvas, was "mitwächst".

Gruß Frank
Angehängte Dateien
Dateityp: zip offscreen-bitmap_165.zip (119,4 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
extrem

Registriert seit: 27. Mai 2008
72 Beiträge
 
#20

Re: kein ZEichnen auf vergrößerten Image

  Alt 23. Jun 2008, 22:08
Zitat von _frank_:
image.graphic wird imho mit vergrößert, muss also nicht extra gemacht werden.
Da irrst du dich, die Zeichenfläche muss man selber vergrößern:Vergrößern von TImage bzw. Bitmap

@punker-lili Wie zeichnest du denn deine Noten, ist das ein Bild oder zeichnest du mit Hilfe von Image.canvas...? Wenn gar nicht anders, dann kannst du ja ein Mini- Projekt hier mal anhängen oder per PM schicken.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz