Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

Wie TIcon gestretcht in ein TBitmap zeichnen?

  Alt 1. Mai 2010, 18:33
Ich habe in einer Komponente ein Bitmap liegen, welchem ich aus unterschiedlichen Quellen den Inhalt irgendeines Bildes geben wollte.

Zum Test übergeb ich dort jeweils das Standard-Icon der Form (hab daran nichts verändert)
und das Icon der Anwendung.

Delphi-Quellcode:
Action.Image := Self.Icon;

Action.Image := Application.Icon;
Intern wird dann dieses gemacht.
Delphi-Quellcode:
Procedure TInsightAction.AssignImage(Value: TGraphic);
  Begin
    If Assigned(Value) Then Begin
      If not Assigned(FImage) Then Begin
        FImage := TBitmap.Create;
        FImage.Width := 16;
        FImage.Height := 16;
      End;
      With FImage.Canvas do Begin
        Brush.Color := cl3DLight;
        FillRect(Rect(0, 0, 16, 16));
        //Draw(0, 0, Value);
        StretchDraw(Rect(0, 0, 15, 15), Value);
      End;
try Value.SaveToFile('a.ico'); except end;
FImage.SaveToFile('a.bmp');
    End Else FreeAndNil(FImage);
    DoChanged;
  End;
Das Problem ist nur, daß überhaupt nichts stimmt.
Bei Form.Icon wird garnichts gezeichnet und es tritt auch kein Fehler in StretchDraw oder Draw auf.
SaveToFile wirft aber diese Exception:
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EInvalidGraphic mit der Meldung 'Ungültiges Symbol' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Wärend beim Applications-Icon das Speichern funktioniert, es wird auch gezeichnet, aber immer nur in Originalgröße.
Es ist das 32x32-Standardicon von Delphi und selbst wenn ich dieses mach
Delphi-Quellcode:
StretchDraw(Rect(0, 0, 5, 5), Value);
                       ^^^^
werden immer die obersten 16x16 Pixel über das gesamte Bitmap gezeichnet.




[add]
Auf dem angehängten Bild sind 2 Bereiche markiert.

im Unteren liegt das Application.Icon
und im Oberen sollte 3 Mal das Form.Icon liegen.
> oben sieht man nichts
> unten sieht das Bild immer gleich aus, egal ob .Draw oder ob StretchDraw mit sonstwelchen Bildausmaßen verwendet wird.

Delphi-Quellcode:
StretchDraw(Rect(0, 0, 15, 15), Value);
                 ^^^^ Position
                       ^^^^^^ Ausmaße
Nur wenn ich die Position ändere, dann verschiebt sich das Bild.
Miniaturansicht angehängter Grafiken
unbenannt_380.png  
$2B or not $2B
  Mit Zitat antworten Zitat