AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Bitmaps in 90-Grad-Schritten drehen?

Ein Thema von rory · begonnen am 2. Mär 2006 · letzter Beitrag vom 3. Mär 2006
Antwort Antwort
rory
(Gast)

n/a Beiträge
 
#1

Wie Bitmaps in 90-Grad-Schritten drehen?

  Alt 2. Mär 2006, 23:18
Die Bitmaps sind *immer* quadratisch (nämlich Icons, die als Bitmaps eingelesen wurden).

Wie dreht man die Dinger mit ein paar Zeilen (um jeweils 90 Grad) oder einer Funktion?

mfg
Rory
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Wie Bitmaps in 90-Grad-Schritten drehen?

  Alt 2. Mär 2006, 23:44
such einfach in der codelib: drehendrehen mist schein nichts zu finden... dann kuckst du mal bei den Schweizern: www.swissdelphicenteer.com
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Wie Bitmaps in 90-Grad-Schritten drehen?

  Alt 2. Mär 2006, 23:46
bei bildern allgemein wäre das prinzip eine horizontale linie lesen und vertical schreiben, dann die nächste horizonale linie lesen und vertical schreiben. Also eigentlich ganz simpel.

Hier das ganze mal als source (naja, paar zeilen sinds nicht nur aber es funzt)
Delphi-Quellcode:
procedure Rotate(ABmp: TBitmap);
var LBmp: TBitmap;
    LCountX,
    LCountY : Integer;
    LPixDst,
    LPixSrc : PRGBTriple;
    LDif : Cardinal;
begin
  ABmp.PixelFormat := pf24bit;
  LBmp := TBitmap.Create;
  LBmp.PixelFormat := pf24bit;
  LBmp.Width := ABmp.Height;
  LBmp.Height := ABmp.Width;

  if LBmp.Height > 1 then
    LDif := Cardinal(LBmp.ScanLine[1]) - Cardinal(LBmp.ScanLine[0])
  else
    LDif := 0;
  for LCountY := 0 to ABmp.Height - 1 do
  begin
    LPixSrc := ABmp.ScanLine[LCountY];
    LPixDst := Pointer(Cardinal(LBmp.ScanLine[0]) + Cardinal(LCountY) * SizeOf(TRGBTriple));
    for LCountX := 0 to ABmp.Width - 1 do
    begin
      LPixDst^ := LPixSrc^;
      LPixSrc := Pointer(Cardinal(LPixSrc) + SizeOf(TRGBTriple));
      LPixDst := Pointer(Cardinal(LPixDst) + LDif);
    end;
  end;
  ABmp.Assign(LBmp);
  LBmp.Free;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
rory
(Gast)

n/a Beiträge
 
#4

Re: Wie Bitmaps in 90-Grad-Schritten drehen?

  Alt 3. Mär 2006, 00:20
Danke für die Hinweise.

@ichbins: Auf "www.swissdelphicenteer.com" fehlt mir die "Suchen"-Funktion auf der Homepage. Wie soll ich da was finden?

@Sir Thornberry: So etwa dachte ich mir das auch, hoffte jedoch, das das Delphi schon bereits kann (aber ich bislang noch nicht wusste wie es geht)

mfg
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Wie Bitmaps in 90-Grad-Schritten drehen?

  Alt 3. Mär 2006, 00:32
naja, es gibt eine api funktion die bilder drehen kann. (auch in beliebigem winkel, du musst nur wissen wo die zielpunkte liegen)

Hier mal ein Beispiel unter Nutzung der Api-Funktion. Ich hab mal den Teil in Kommentare gesetzt welchen du brauchst für die quadratichen Bilder (der andere ist irrelevant und dient zur Höhen/Breiten-Anderung)
Delphi-Quellcode:
procedure Rotate(ABmp: TBitmap);
var LPoints : array[0..2] of TPoint;
    LOldSize: TPoint;
begin
  LOldSize := Point(ABmp.Width, ABmp.Height);
  if ABmp.Width > ABmp.Height then
    ABmp.Height := ABmp.Width
  else
    ABmp.Width := ABmp.Height;

  //Bei quadratichen Bildern ab hier
  LPoints[0] := Point(ABmp.Height, 0);
  LPoints[1] := Point(ABmp.Height, ABmp.Width);
  LPoints[2] := Point(0, 0);
  PlgBlt(ABmp.Canvas.Handle, LPoints, ABmp.Canvas.Handle, 0, 0, ABmp.Width, ABmp.Height, 0, 0, 0);
  //Bei quadratichen Bildern bis hier

  ABmp.Width := LOldSize.Y;
  ABmp.Height := LOldSize.X;
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:46 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