Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan > Helfer & Tools > Dlls, Includes, Units & Prozeduren

Dlls, Includes, Units & Prozeduren Alles zu den Themen Dlls, Includes, Units & Prozeduren

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26653, Antworten: 4197
Gehe zum ersten neuen Beitrag [Windows XP-32 bit] Verschlüsselungs Trojaner
Aufrufe: 64, Antworten: 2
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 74, Antworten: 6
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7540, Antworten: 175
Gehe zum ersten neuen Beitrag Gibts denn nichts neues?
Aufrufe: 869, Antworten: 46
Gehe zum ersten neuen Beitrag Rechner fährt herunter,...
Aufrufe: 102, Antworten: 5
PPF - Shoppingwahn
Aufrufe: 50869, Antworten: 1390
Gehe zum ersten neuen Beitrag Windows Oberfläche (Schrift,...
Aufrufe: 183, Antworten: 10
Gehe zum ersten neuen Beitrag TabCtrl
Aufrufe: 128, Antworten: 12
Gehe zum ersten neuen Beitrag Dateien lassen sich nicht...
Aufrufe: 26, Antworten: 2
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13.01.2010, 10:26   #1 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 13.01.2010
Beiträge: 5
Standard Prospeed.dll - Bilder drehen

Habe für eine alte Version von Prospeed.dll eine Prozedur zum Drehen und Einpassen eines Bildes geschrieben. Doch mit der neuen Version geht die nicht mehr. Leider bin ich beim Umsetzen in den neuen Code gescheitert. Kann mit jemand helfen?
Hier ist der Code für die Prozedur für die alte Prospeed.dll Version. Die Prozedur zeichnet ein Bild in ein vorgegebenes Rechteck und dreht es beim Drucken um 90 grad, was mit dem Parameter drk% gesteuert wird.
Code:
Proc BildAnz
  parameters BDatei$, Bx&, By&, BreitX&, BreitY&, Drk%
  declare BQuelle&, BBreite&, BHoehe&, neubreit&, neuhoch&
  declare neubreitx&, neuhochy&, DrkKlein&, DrkBild&
  declare Faktor%
  let Faktor% = 10
  BQuelle&=LoadExtImage(addr(BDatei$))
  ifnot equ(BQuelle&,0)
    BBreite& = GetBmpWidth(BQuelle&)           'Breite und Hoehe des Bildes 
    BHoehe& = GetBmpHeight(BQuelle&)                   'ermitteln 
    ' messagebox(Str$(BBreite&),Str$(BHoehe&),0)
    if gt(BBreite& / BHoehe& , BreitX& / BreitY&)
      neubreit& = BreitX&
      neuhoch& = BHoehe&/BBreite&*neubreit&
    else
      neuhoch& = BreitY&
      neubreit& = BBreite&/BHoehe&*neuhoch&
    endif
    if drk%
      let neuhoch& = neuhoch& * Faktor%
      let neubreit& = neubreit& * Faktor%
      DrkKlein&=CreateExtBmp(%HDC,neubreit&,neuhoch&)
      SizeExtBmp (DrkKlein&,0,0,neubreit&,neuhoch&,BQuelle&,0,0,BBreite&,BHoehe&,0)
      DrkBild&=CreateExtBmp(%HDC,neuhoch&,neubreit&)
      ' Die automatische Zentrierung beim Rotieren ausgleichen
        If neubreit&>=neuhoch&
          neubreitx&=(neubreit&-neuhoch&)/2
        Else
          neubreitx&=(neuhoch&-neubreit&)/2
        EndIf
        neuhochy&=neubreitx&
        Case neubreit&>neuhoch&:neubreitx&=-neubreitx&
        Case neuhoch&>neubreit&:neuhochy&=-neuhochy&
      RotateExtBmp(DrkBild&,neubreitx&,neuhochy&,neubreit&,neuhoch&,DrkKlein&,0,0,90,0)
      let Bx& = Bx& * Faktor%
      let By& = By& * Faktor%
      CopyExtBmp(%hdc,Bx&,By&,neuhoch&,neubreit&,DrkBild&,0,0,0)
    else
      SizeExtBmp (%hdc,Bx&,By&,neubreit&,neuhoch&,BQuelle&,0,0,BBreite&,BHoehe&,0)
    endif
  endif
  FreeAllExtBmps()
endproc
Bernhardus ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 13.01.2010, 13:34   #2 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.091
Standard

Schau mal in die Datei Anleitung/Was ist neu.pdf. Viele Funktionsnamen waren zum Schluss irreführend, wie z.B. CreateExtBmp(). Dieses kann viel mehr als nur Bmp-Daten erstellen, darum heisst die Funktion jetzt CreateImage(). Von der neuen Namengebung sind noch andere Funktionen betroffen, einige wurden auch komplett abgeschafft.

Folgende Funktionen wurden in Version 3.0 komplett abgeschafft:
BmpToPsf, BreakOn, BreakOff, CDDoor
GetPsfFileSize, LoadExtBmp, PsfFileName, PsfToBmp

Folgende Funktionen wurden umbenannt in Version 3.0:

CloneFX (vorher CloneArray)
CopyFX (vorher CopyArray)
PaintImage (vorher CopyExtBmp)
CreateImage (vorher CreateExtBmp)
CreateFX (vorher CreateExtFX)
ColorFillImage (vorher FillExtBmp)
ColorFill (vorher FillFX)
FreeAllImages (vorher FreeAllExtBmps)
FreeImage (vorher FreeExtBmp)
FreeFX (vorher FreeExtFX)
Merge (vorher Fuse)
GetHeightImage (vorher GetBmpHeight)
GetInfosImage (vorher GetBmpInfos)
GetWidthImage (vorher GetBmpInfos)
InitFX (vorher InitExtFX)
LoadFileImage (vorher LoadExtImage)
LoadMemoryImage (vorher LoadExtMemory)
LoadResourceImage (vorher LoadExtResource)
RotateImage (vorher RotateExtBmp)
SaveFX (vorher Save)
SaveImage (vorher SaveExtFX)
SaveToMemoryFX (vorher SaveToMemory)
SizeImage (vorher SizeExtBmp)

Folgende Funktionen wurden in Version 3.0 erweitert oder erneuert:
AlphaTrans, Water


Anhand der Auflistung sollte es dir ein leichtes seine, deinen Code im Editor per Suchen/Ersetzen rundzuerneuern.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 15.01.2010, 16:06   #3 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 13.01.2010
Beiträge: 5
Standard Drehen mit Prospeed

Hallo Frank,
vielen Dank für die schnelle Antwort und die Hilfe, aber leider schaffe ich es alleine einfach nicht. Ich habe alles versucht, die Befehle zu ersetzen. Das Problem ist, das Bild dreht sich bei mir einfach nicht. Hier ist mein gescheiterter Versuch der Umsetzung des Drehens um 90 Grad. Das Problem habe ich so weit wie möglich isoliert. Bitte wirf doch mal kurz einen Blick auf den Code, ob dir ein Fehler auffällt.
Viele Grüße
Bernd
Code:
declare text$,neu&,Bild&,Hintergrund&,array1&,array2&,X&,Y&, neuX&, neuY&
Def GetSysColor(1) !"USER32","GetSysColor"
SetTrueColor 1
windowstyle 26
Window 0,0-1024,700
cls GetSysColor(15)
$I Prospeed_Funktionen.inc
neu&=usedll("ProSpeed.dll")
' *** Bild laden, das rotiert werden soll
text$="BspBild2.jpg"
Bild&=LoadFileImage(addr(text$))
X&=GetWidthImage(Bild&)
Y&=GetHeightImage(Bild&)
hintergrund&=CreateImage(%HDC,X&,Y&)
' Die automatische Zentrierung beim Rotieren ausgleichen
If X&>=Y&
  neuX&=(X&-Y&)/2
Else
  neuX&=(Y&-X&)/2
EndIf
neuY&=neuX&
Case X&>Y&:neuX&=-neuX&
Case Y&>X&:neuY&=-neuY&
PaintImage(hintergrund&,neuX&,neuY&,X&,Y&,hintergrund&,0,0,14)
' *** Beide Bilder in Arrays umwandeln
array1&=InitFX(hintergrund&)
array2&=InitFX(Bild&)
Rectangle 19,19-21+Y&,21+X&
Rotate(%HDC,neuX&,neuY&,array1&,array2&,90,0)
PaintImage(%HDC,neuX&,neuY&,X&,Y&,Bild&,0,0,0)
waitinput
' *** Byte-Array's wieder löschen
'
FreeFX(array1&) 
FreeFX(array2&) 
FreeImage(Bild&)
FreeImage(Hintergrund&)
freedll neu&
End
Bernhardus ist offline   Mit Zitat antworten
Alt 15.01.2010, 17:07   #4 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.091
Standard

Hallo Bernhardus,

schau mal den Code:

Code:
declare text$,neu&,Bild&,arbeitsbild&,Hintergrund&,array1&,array2&,X&,Y&,z&,neuX&,neuY&

Def GetSysColor(1) !"USER32","GetSysColor"

SetTrueColor 1
windowstyle 26
Window 0,0-1024,700
cls GetSysColor(15)
$I Prospeed_Funktionen.inc
neu&=usedll("ProSpeed.dll")

' *** Bild laden, das rotiert werden soll
text$="al1.gif"
arbeitsbild&=LoadFileImage(addr(text$))
X&=GetWidthImage(arbeitsbild&)
Y&=GetHeightImage(arbeitsbild&)

z&=x&
case y&>x&:z&=y&
bild&=CreateImage(%HDC,z&,z&)
PaintImage(bild&,((z&/2)-(x&/2)),((z&/2)-(y&/2)),x&,y&,arbeitsbild&,0,0,0)
FreeImage(arbeitsbild&)

hintergrund&=CreateImage(%HDC,z&,z&)
PaintImage(hintergrund&,0,0,z&,z&,%hdc,0,0,0)

' *** Beide Bilder in Arrays umwandeln
Whileloop 30
  array1&=InitFX(hintergrund&)
  array2&=InitFX(Bild&)
  Rotate(bild&,0,0,array1&,array2&,90,-1)
  PaintImage(%hdc,0,0,z&,z&,bild&,0,0,0)
  FreeFX(array1&) 
  FreeFX(array2&) 
  Sleep 150
EndWhile

waitinput

FreeImage(Bild&)
FreeImage(Hintergrund&)
freedll neu&
End
Wenn Bilder mit Rotate() gedreht werden sollen, ist der Programmierer dafür verantwortlich, dass im Bild auch genug Platz zur Verfügung steht. Drehst du ein 100x50 Pixel großes Bild um 90 Grad, hast du immer noch ein 100x50 großes Bild, weil nicht das Bild gedreht wird, sondern nur die Bildinformationen! Demnach ist dein Bild 100x50, die Bildinfos (Grafik im Bild) ist aber 50x100. Da werden dann natürlich Informationen abgeschnitten.
Du solltest bei Rotate() auch den Kopiermodus beachten. Wenn du nicht transparent drehst, wird auch dein Hintergrund bemalt. In Fall von überflüssigen Randinfos eben schwarz.

Ich weiss, die Grafikarrays sind mitunter nicht einfach zu verstehen. Wenn man aber den Bogen mal raus hat, kann man damit echte Wunder bewirken. Schau dir mal das ProSpeed-Demo \Demos & Sourcecodes (AutoIt)\fx-autoit-prospeed-megademo\fx-imagedemo.exe an. Du wirst staunen...

P.S.: Den schwarzen Rahmen hatte ich jetzt nicht weiter beachtet, weil ich nicht genau wusste, was du damit anstellen willst. Ich empfehle dir aber, ihn nach dem laden des Bilds einfach direkt in das Bild zu zeichnen!
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.

Geändert von Frabbing (15.01.2010 um 17:38 Uhr)
Frabbing ist offline   Mit Zitat antworten
Alt 16.01.2010, 20:09   #5 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 13.01.2010
Beiträge: 5
Standard Prospeed.dll - Bilder drehen

Hallo Frank,
Vielen Dank für dieses einfachere Beispiel.
Ok, diesen Code kann ich wahrscheinlich verstehen, nachbauen und auf meine Bedürfnisse anpassen, wenn ich mich länger damit beschäftige. Aber ein Problem habe ich noch, bevor ich damit anfangen kann, wobei ich das Problem auch schon mit dem Beispielprogramm der neuen Prospeed.dll hatte:
Der Code funktioniert wunderbar mit relativ quadratischen Bildern (z. B. 300*296 Pixel). Wenn das Bild aber eine deutlich größere Breite als Höhe hat (z. B. 285*141 Pixel), dann passiert etwas ganz seltsames: Das Bild ist nach dem Drehen nur noch schwarz weiß und es ist auch nicht ganz 90 Grad gedreht sondern schräg und teilweise versetzt, obwohl 90 grad im Code eingestellt sind. Relativ quadratische Bilder können einwandfrei mit demselben Code gedreht werden . Kannst du das erklären?
Vielen Dank im Voraus für deine Mühe.
Viele Grüße
Bernd
Bernhardus ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 16.01.2010, 22:17   #6 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.091
Standard

Ja, das kann ich erklären. Du solltest keine Bilder verwenden mit z.B. der Größe 285*141.
Die Breite eines Bilds für ein Grafik-Array sollte immer eine Breite besitzen, die glatt durch 4 teilbar ist. In deinem Fall also 284*141, bzw. 288*141.
Grund ist, dass bei nicht-glatt-durch-vier-teilbaren Breiten (von Windows) zusätzliche Bytes in das Bild einbaut sind, welche einen Effekt langsamer machen, weil eben diverse Abfragen nötig wären. Darum erwartet ProSpeed bei der Bildbreite diese Sonderbehandlung.
Deine Grafik war schlichtweg durch die Zusatzbytes in den Farben und in der Zusammensetzung verschoben.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 17.01.2010, 10:17   #7 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 13.01.2010
Beiträge: 5
Standard Bild mit Prospeed.dll drehen

Das war es, vielen Dank. Ich habe zwar den Hinweis mit der durch 4 teilbaren Breite gelesen, konnte es aber nicht richtig umsetzen.
Den Code von dir habe ich etwas modifiziert: Mit folgendem Code kann man jede Bilddatei drehen, da die Breite des Bildes vor der Drehung ggf. einfach entsprechend durch eine leuchte Zerrung mit Sizeimage verringert wird. Wenn jemand eine bessere Idee hat, wie man es umsetzen kann, dass jede beliebige Datei gedreht werden kann, wäre ich dankbar. (Besser wäre meiner Meinung nach z. B., wenn das Programm die entsprechenden Pixel abschneiden würde, statt das Bild zu zerren, das konnte ich aber nicht realisieren.)
Gruß Bernd

Hier der Code:
Code:
declare text$,neu&,Bild&,arbeitsbild&,Hintergrund&,array1&,array2&,X&,Y&,z&,neuX&,neuY&
declare Ladebild&, XLad&
Def GetSysColor(1) !"USER32","GetSysColor"
SetTrueColor 1
windowstyle 26
Window 0,0-1024,700
cls GetSysColor(15)
$I Prospeed_Funktionen.inc
neu&=usedll("ProSpeed.dll")
' *** Bild laden, das rotiert werden soll
text$="BSPBild.jpg"
Ladebild&=LoadFileImage(addr(text$))
XLad&=GetWidthImage(Ladebild&)
Y&=GetHeightImage(Ladebild&)
' *** Ggf. Breite des Ladebildes durch 4 teilbar machen
if XLad& mod 4 <> 0
  let x&=xLad&-(XLad& mod 4)
  arbeitsbild&=CreateImage(%HDC,x&,y&)
  SizeImage (arbeitsbild&,0,0,x&,y&,Ladebild&,0,0,x&,y&,0)
else
  arbeitsbild&=LoadFileImage(addr(text$))
  X&=GetWidthImage(arbeitsbild&)
endif
z&=x&
case y&>x&:z&=y&
bild&=CreateImage(%HDC,z&,z&)
PaintImage(bild&,((z&/2)-(x&/2)),((z&/2)-(y&/2)),x&,y&,arbeitsbild&,0,0,0)
FreeImage(arbeitsbild&)
hintergrund&=CreateImage(%HDC,z&,z&)
PaintImage(hintergrund&,0,0,z&,z&,%hdc,0,0,0)
' *** Beide Bilder in Arrays umwandeln
Whileloop 30
  array1&=InitFX(hintergrund&)
  array2&=InitFX(Bild&)
  Rotate(bild&,0,0,array1&,array2&,90,-1)
  PaintImage(%hdc,0,0,z&,z&,bild&,0,0,0)
  FreeFX(array1&) 
  FreeFX(array2&) 
  Sleep 150
EndWhile
waitinput
Freeimage(arbeitsbild&)
Freeimage(Ladebild&)
FreeImage(Bild&)
FreeImage(Hintergrund&)
freedll neu&
End

Geändert von Bernhardus (17.01.2010 um 10:27 Uhr)
Bernhardus ist offline   Mit Zitat antworten
Alt 17.01.2010, 15:12   #8 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.091
Standard

Hast du ein Bild von z.B. 83x60, kannst du es ja jederzeit in einen zusätzlichen DC kopieren, in dem Fall einen mit der Größe 80x60. Oder du benutzt eben deine Variante, beide sind überall so üblich.
__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Alt 18.01.2010, 12:20   #9 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 13.01.2010
Beiträge: 5
Standard Bild drehen mit ProSpeed.dll

Hallo Frank,
stimmt, man braucht gar nicht sizeimage sondern kann mit Paintimage die überflüssigen Pixel abscheiden. Etwa so
Code:
Ladebild&=LoadFileImage(addr(text$))
XLad&=GetWidthImage(Ladebild&)
Y&=GetHeightImage(Ladebild&)
' *** Ggf. Breite des Ladebildes durch 4 teilbar machen
if XLad& mod 4 <> 0
  let x&=xLad&-(XLad& mod 4)
  arbeitsbild&=CreateImage(%HDC,x&,y&)
  PaintImage (arbeitsbild&,0,0,x&,y&,Ladebild&,0,0,0)
else
  arbeitsbild&=LoadFileImage(addr(text$))
  X&=GetWidthImage(arbeitsbild&)
endif
Das andere Programm läuft jetzt auch einwandfrei mit der neuen Prospeed.dll. Vielen Dank für deine Hilfe.
Viele Grüße
Bernd
Bernhardus ist offline   Mit Zitat antworten
Alt 18.01.2010, 17:10   #10 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.091
Standard

__________________
Gruß, Frank


Webpage http://frabbing.bplaced.net
mit Freeware - Tools, Spiele und Grafiken.
Frabbing ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan > Helfer & Tools > Dlls, Includes, Units & Prozeduren

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bilder drehen recado Software - Allgemein 6 05.11.2009 16:22
ProSpeed.dll mit SizeImage Bilder verkleinern und speichern ? Unregistriert Dlls, Includes, Units & Prozeduren 1 25.04.2009 15:42
Bereich einlesen mit Prospeed profanfan Helfer & Tools 9 10.03.2009 16:53
Prospeed 3.0 komplett mit Beispiel profanfan Helfer & Tools 15 09.03.2009 22:22
ProSpeed.dll - Version 3.0 Frabbing Dlls, Includes, Units & Prozeduren 1 07.03.2009 22:16



Alle Zeitangaben in WEZ +2. Es ist jetzt 09:58 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2