AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Bild um 270° drehen

Ein Thema von resyiii · begonnen am 19. Mär 2012 · letzter Beitrag vom 20. Feb 2019
Antwort Antwort
Seite 1 von 2  1 2   
resyiii

Registriert seit: 11. Mär 2009
Ort: Oranienburg
31 Beiträge
 
#1

Bild um 270° drehen

  Alt 19. Mär 2012, 18:07
das ist der quelltext, um ein bild mittels canvas um 90 grad zu drehen,

Code:
procedure BitmapDrehen_90Grad(const Bitmap: TBitmap);
var P: PRGBQuad; //^THelpRGB;
    x,y,b,h : Integer;
    RowOut: ^TMyHelp;
    help: TBitmap;
begin
  Bitmap.PixelFormat := pf32bit;
  help := TBitmap.Create;
  try
    help.PixelFormat := pf32bit;
    b := bitmap.Height;
    h := bitmap.Width;
    help.Width := b;
    help.height := h;
    for y := 0 to (h-1) do
    begin
      rowOut := help.ScanLine[y];
      P := Bitmap.scanline[bitmap.height-1];
      inc(p,y);
      for x := 0 to (b-1) do
      begin
        rowout[x] := p^;
        inc(p,h);
      end;
    end;
  finally
    bitmap.Assign(help);
    help.Free;
  end;
end;


ich will mein bild aber auch in die andere richtung drehen, also entweder in -90° oder in 270°
wie ist das möglich?
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Bild um 270° drehen

  Alt 19. Mär 2012, 18:24
Versuch mal etwas mit for x zu machen.
  Mit Zitat antworten Zitat
resyiii

Registriert seit: 11. Mär 2009
Ort: Oranienburg
31 Beiträge
 
#3

AW: Bild um 270° drehen

  Alt 19. Mär 2012, 18:30
hab was versucht, programm bricht aber immer zusammen
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Bild um 270° drehen

  Alt 19. Mär 2012, 18:36
Warum?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Bild um 270° drehen

  Alt 19. Mär 2012, 19:10
http://www.delphipraxis.net/165404-b...ll-drehen.html #7
eine neuere Unit ist auch enthalten in
http://www.delphipraxis.net/167172-r...-ausgeben.html
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
zeina

Registriert seit: 8. Jun 2018
56 Beiträge
 
#6

AW: Bild um 270° drehen

  Alt 20. Feb 2019, 09:38
Hallo,
ich habe noch dies Problem,gibt es jemanden mir ein paar tipp zu geben??
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.030 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Bild um 270° drehen

  Alt 20. Feb 2019, 09:45
Stell dir ein rechteckiges Bild vor. Such dir in diesem Bild ein Pixel (am besten am Rand) aus.
Dann dreh das Bild in deinem Kopf um 90° nach links schau dir an von wo nach wo dein Pixel wandert (X/Y-Position im Bild).
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
zeina

Registriert seit: 8. Jun 2018
56 Beiträge
 
#8

AW: Bild um 270° drehen

  Alt 20. Feb 2019, 09:50
Stell dir ein rechteckiges Bild vor. Such dir in diesem Bild ein Pixel (am besten am Rand) aus.
Dann dreh das Bild in deinem Kopf um 90° nach links schau dir an von wo nach wo dein Pixel wandert (X/Y-Position im Bild).
Danke Für Die Antwort.mein Programm kann ein bild nach rechts drehen.Ich würde gerne es auch nach links drehen.

Delphi-Quellcode:
type TRGBarray = array[0..0] of TRGBQuad;


procedure TFoto.rotate90(const Source:TGraphic ; Target: TBitmap);
var P: PRGBQuad;
  y, x, h, b: integer;
  Rowout: ^TRGBarray;
  sourcebmp: TBitmap;
begin
  sourcebmp := TBitmap.Create;
  try
    sourcebmp.PixelFormat := pf32bit;
    sourcebmp.Height := Source.Height;
    sourcebmp.Width := Source.Width;
    sourcebmp.Canvas.Draw(0, 0, Source);
    Target.PixelFormat := pf32bit;
    b := sourcebmp.Height;
    h := sourcebmp.Width;
    Target.Height := h;
    Target.Width := b;
    for y := 0 to (h - 1) do begin
      rowout := Target.ScanLine[y];
      p := sourcebmp.ScanLine[sourcebmp.height-1];
      inc(p, y);
      for x := 0 to (b-1) do begin
      rowout[x] := p^;
      inc(p, h);
    end;
    end;
  finally
    sourcebmp.Free;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.285 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Bild um 270° drehen

  Alt 20. Feb 2019, 10:00
Weisst Du wie Deine Methode ein Bild um 90° dreht? Das dürfte Dir die Lösung nämlich deutlich erleichtern... Schlagworte als Denkansatz: Zeilen, Spalten.

Sherlock
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
855 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Bild um 270° drehen

  Alt 20. Feb 2019, 10:09
Versuch es hiermit mal:
Delphi-Quellcode:
procedure RotateBitmap(Degree: Word; Source, Dest: TBitmap);
var
  Points: array[0..2] of TPoint;
  Angle: Double;
  X1, X2,
  Y1, Y2: integer;
begin
  if Degree <= 360 then
  begin
    Angle:= (Degree- Degree div 90* 90)/ 180* pi;
    X1:= Round(Source.Width* sin(Angle));
    X2:= Round(Source.Width* cos(Angle));
    Y2:= Round(Source.Height* sin(Angle));
    Y1:= Round(Source.Height* cos(Angle));
    Case Degree of
      0..89, 360:
      begin
        Points[1] := Point(X2, 0);//rechts oben
        Points[0] := Point(0, X1);//links oben
        Points[2] := Point(Y2, Y1+ X1);//links unten
        Dest.Width:= X2+ Y2;
        Dest.Height:= Y1+ X1;
      end;
      90..179:
      begin
        Points[1] := Point(0, Y2);//rechts oben
        Points[0] := Point(X1, Y2+ X2);//links oben
        Points[2] := Point(X1+ Y1, X2);//links unten
        Dest.Width:= Y1+ X1;
        Dest.Height:= X2+ Y2;
      end;
      180..269:
      begin
        Points[1] := Point(Y2, X1+ Y1);//rechts oben
        Points[0] := Point(Y2+ X2, Y1);//links oben
        Points[2] := Point(X2, 0);//links unten
        Dest.Width:= X2+ Y2;
        Dest.Height:= Y1+ X1;
      end;
      270..359:
      begin
        Points[1] := Point(X1+ Y1, X2);//rechts oben
        Points[0] := Point(Y1, 0);//links oben
        Points[2] := Point(0, Y2);//links unten
        Dest.Width:= Y1+ X1;
        Dest.Height:= X2+ Y2;
      end;
    end;
    PlgBlt(Dest.Canvas.Handle, Points, Source.Canvas.Handle, 0, 0, Source.Width, Source.Height, 0, 0, 0);
  end;
end;
Habe ich hier in der DP gefunden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf