Entwickler-Ecke
Multimedia / Grafik - Canvas / Picture / Bitmap zeichnen
galagher - Mo 13.11.06 18:40
Titel: Canvas / Picture / Bitmap zeichnen
Hallo!
Ich möchte ein - sagen wir mal ganz unprofessionell - Bild von einem Image in ein anderes zeichnen, aber ohne dabei die tatsächliche Grösse in Pixeln zu zeichnen, sondern nur die dargestellte Miniatur so wie sie ist. Das Beipielbild zeigt den Design-Zeitpunkt. Es soll das Bild, so wie es dargestellt ist, in ein anderes Image gezeichnet werden. Das Original-Bitmap ist viel grösser, ich will aber nur die Miniatur zeichnen.
Alle meine Versuche ergaben, dass das Bild in Originalgrösse gezeichnet wird. Ich will aber ein Bild, das genauso klein ist wie die Miniatur, das heisst, wenn ich es speichere, habe ich ein so kleines Bild gespeichert! Dabei ist es wichtig, dass die "leeren" Bereiche oben und unten mitgezeichnet werden - 69x69 Pixel.
Ich habe Folgendes ohne Erfolg gamacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| var MyRect, MyOther: TRect; X, Y: Integer; aColor: TColor; begin for X := 0 to 69 do for Y := 0 to 69 do begin aColor := ImagePlus1.Picture.Bitmap.Canvas.Pixels[X, Y]; ImagePlus2.Canvas.Pixels[X, Y] := aColor; end;
exit;
MyRect := Rect(0, 0, 69, 69);
ImagePlus2.Canvas.CopyMode := cmSrcCopy; ImagePlus2.Canvas.StretchDraw(MyRect, ImagePlus2.Picture.Graphic); end; |
Es sollte auch mit .jpg und .gif klappen! Ist einer von euch ein Grafik-Spezialist, der das kann?
Marco D. - Mo 13.11.06 18:52
Liegt das Bild als TBitmap vor?
galagher - Mo 13.11.06 19:08
Marco D. hat folgendes geschrieben: |
Liegt das Bild als TBitmap vor? |
Kann auch ein Jpg oder Gif sein.
Habe jetzt das hier versucht, aber ...
Delphi-Quelltext
1: 2: 3:
| MyRect := Rect(0, 0, ImagePlus1.Picture.Width, ImagePlus1.Picture.Height); MyOther := Rect(0, 0, 69, 69); ImagePlus2.Canvas.CopyRect(MyOther,ImagePlus1.Picture.Bitmap.Canvas,MyRect); |
... das verzerrt das Ergebnis:
elundril - Mo 13.11.06 19:13
schaut mir eher nach falschem pixelformat aus aber ich bin auch nicht dere ultimative grafik experte!
lg el
galagher - Mo 13.11.06 19:36
Ich will doch nur was ich sehe - nur das und in genau der Grösse, in der ich es sehe (69x69) - anderswo genauso zeichnen, und es gelingt mir nicht! :cry:
Narses - Mo 13.11.06 19:44
Moin!
Schau mal nach sowas:
BITMAP SKALIEREN
Vielleicht kommst du damit weiter. ;)
cu
Narses
galagher - Mo 13.11.06 20:09
Leider nicht, da ist was dabei, das zwar klappt, aber es kopiert das Bild, und das ist gleich dem Originalbild. Hier der Code:
Delphi-Quelltext
1: 2:
| ImagePlus2.Picture.Bitmap := ImagePlus1.Picture.Bitmap; ImagePlus2.Picture.Bitmap.Canvas.FillRect(Rect(0,0,69,69)); |
Die Proportionen passen ja, aber wenn man das speichert, erhält man eine Dateigrösse, die dem Original gleicht.
galagher - Mo 13.11.06 20:34
Das darf doch nicht wahr sein - wieder einen Code gefunden, der das Ergebnis verzerrt bzw, nur einen Ausschnitt darstellt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.ResizeImage(newWidth,newHeight: Integer); begin SetStretchBltMode(ImagePlus2.Canvas.Handle, Halftone); StretchBlt(ImagePlus2.Canvas.Handle, 0,0,newwidth,newheight, ImagePlus1.Canvas.Handle,0,0, ImagePlus1.Width,ImagePlus1.Height,SRCCOPY); end; |
Gefunden hier:
http://www.delphipraxis.net/post151.html
elundril - Mo 13.11.06 21:54
das interessiert mich jetzt aber auch! Ich mach mich mal auf die suche nach Codes!
mfg el
jaenicke - Mo 13.11.06 22:23
elundril hat folgendes geschrieben: |
schaut mir eher nach falschem pixelformat aus aber ich bin auch nicht dere ultimative grafik experte! |
Merkt man gar nicht ;-)
Zum Thema: Die Quelltexte funktionieren alle, du machst nur einen Denkfehler! Du hast ja gar kein quadratisches Bild. Wenn du deses aber auf 69 mal 69 Pixel in ein quadratisches Format bringst (egal mit welchem der Quelltxte), dann ist es natürlich verzerrt.
Du musst das Seitenverhältnis beibehalten...
Beispiel:
Du hast ein Bild mit einr Größe von 690 mal 345 Pixeln. Dieses willst du ja nicht auf 69 mal 69, sondern auf 69 mal 34,5 Pixel, nur um 34,5 / 2, also um 17,25 Pixel nach unten versetzt haben (natürlich dann gerundet).
Schließlich sind im Originalbild doch keine Streifen oben und unten mit drin...
Auf die Zielhöhe von 34,5 kommst du mit 69 * 345 / 690. Davon nochmal die Hälfte muss das Bild nach unten verschoben werden. Um einen Integer-Wert zu erhalten kannst du auch statt dem / direkt ein div benutzen.
galagher - Mo 13.11.06 22:44
jaenicke hat folgendes geschrieben: |
Beispiel:
Du hast ein Bild mit einr Größe von 690 mal 345 Pixeln. Dieses willst du ja nicht auf 69 mal 69, sondern auf 69 mal 34,5 Pixel, nur um 34,5 / 2, also um 17,25 Pixel nach unten versetzt haben (natürlich dann gerundet).
Schließlich sind im Originalbild doch keine Streifen oben und unten mit drin... |
Zum Speichern sollten alle Miniaturen exakt die selbe Anzahl an Bytes haben. Aber erstmal will ich es hinkriegen, dass die Proportionen stimmen.
jaenicke hat folgendes geschrieben: |
Auf die Zielhöhe von 34,5 kommst du mit 69 * 345 / 690. Davon nochmal die Hälfte muss das Bild nach unten verschoben werden. Um einen Integer-Wert zu erhalten kannst du auch statt dem / direkt ein div benutzen. |
Aber wie erhalte ich nun die korrekten Werte?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var Y: Integer; MyRect: TRect; begin Y := 69 * ImagePlus1.Picture.Height div ImagePlus1.Picture.Width;
MyRect := Rect(0, 0, ImagePlus1.Picture.Width, Y);
ImagePlus2.Canvas.CopyMode := cmSrcCopy; ImagePlus2.Canvas.StretchDraw(MyRect, ImagePlus1.Picture.Graphic); end; |
jaenicke - Mo 13.11.06 22:50
Ich würde mal vermuten, dass jetzt das Seitenverhältnis stimmt, nur dass das Bild ganz oben im zweiten hängt, oder? Wen nicht, hättest du mal dazusagen müssen, was bei rauskommt.
Jedenfalls vermute ich nur, dass du das Zielrechteck nur noch statt bei (0, 0) bei (0, y div 2) anfangen lassen musst.
jaenicke hat folgendes geschrieben: |
Davon nochmal die Hälfte muss das Bild nach unten verschoben werden. |
galagher - Mo 13.11.06 22:52
Funktioniert prinzipiell, aber verzerrt immer noch etwas:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var X, Y: Integer; MyRect: TRect; begin X := 69 * ImagePlus1.Picture.Width div ImagePlus1.Picture.Height; Y := 69 * ImagePlus1.Picture.Height div ImagePlus1.Picture.Width;
MyRect := Rect(0, 0, X, Y);
ImagePlus2.Canvas.CopyMode := cmSrcCopy; ImagePlus2.Canvas.StretchDraw(MyRect, ImagePlus1.Picture.Graphic); end; |
Da fehlt mir noch der entscheidende Dreh an der Sache! :?
jaenicke - Mo 13.11.06 22:58
So ists aber Blödsinn, du musst ja nur die Höhe an die Breite von 69 Pixeln anpassen. So kommt da IMHO eigentlich Blödsinn heraus. :shock: :gruebel:
Ich dachte eigentlich, dass nur das 0,0 falsch wäre...
galagher hat folgendes geschrieben: |
Zum Speichern sollten alle Miniaturen exakt die selbe Anzahl an Bytes haben. |
Bei Bitmaps ist das bei derselben Größe automatisch so. Das Problem ist: Die Größe der Bilder ist unterschiedlich. Das geht also nicht, es sei denn du speicherst die Ränder mit, sodass du immer 69 mal 69 Pixel hast.
Aber mir fällt ehrlich gesagt kein einziger sinnvoller Grund ein, warum die alle die gleiche Größe haben sollten. Ist doch Platzverschwendung, wenn man die extra auf ne feste Größe aufbläht. :gruebel:
galagher - Di 14.11.06 18:17
jaenicke hat folgendes geschrieben: |
So ists aber Blödsinn, du musst ja nur die Höhe an die Breite von 69 Pixeln anpassen. So kommt da IMHO eigentlich Blödsinn heraus. :shock: :gruebel:
Ich dachte eigentlich, dass nur das 0,0 falsch wäre... |
Ich habe jetzt also folgenden Code, das Ergebnis siehe unten im Beispiel.bmp:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| X := ImagePlus1.Picture.Width; Y := 69 * ImagePlus1.Picture.Height div ImagePlus1.Picture.Width;
MyRect := Rect(0, Y div 2, X, Y);
ImagePlus2.Canvas.CopyMode := cmSrcCopy; ImagePlus2.Canvas.StretchDraw(MyRect, ImagePlus1.Picture.Graphic); |
Irgendwas mache ich falsch...
jaenicke hat folgendes geschrieben: |
Bei Bitmaps ist das bei derselben Größe automatisch so. |
Stimmt.
jaenicke hat folgendes geschrieben: |
Aber mir fällt ehrlich gesagt kein einziger sinnvoller Grund ein, warum die alle die gleiche Größe haben sollten. |
Ich habe eine Funktion LoadBitmapsFromFile, die Bitmaps, die in einer einzigen Datei gesammelt gespeichert sind, in eine ImageList laden kann. Dazu muss man die Grösse der einzelnen Bitmaps angeben.
galagher - Di 14.11.06 18:57
jaenicke hat folgendes geschrieben: |
Ich würde mal vermuten, dass jetzt das Seitenverhältnis stimmt, nur dass das Bild ganz oben im zweiten hängt, oder? Wen nicht, hättest du mal dazusagen müssen, was bei rauskommt.
Jedenfalls vermute ich nur, dass du das Zielrechteck nur noch statt bei (0, 0) bei (0, y div 2) anfangen lassen musst.
jaenicke hat folgendes geschrieben: | Davon nochmal die Hälfte muss das Bild nach unten verschoben werden. |
|
Mit diesem Code hängt das Bild links und oben, "freie" Bereiche werden weiss gezeichnet - s. Beispielbild. Das Ergebnis ist zudem noch etwas verzerrt, wobei die Verzerrung umso deutlicher ist, je weniger quadratisch das Original ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| X := 69 * ImagePlus1.Picture.Width div ImagePlus1.Picture.Height; Y := 69 * ImagePlus1.Picture.Height div ImagePlus1.Picture.Width;
MyRect := Rect(0, 0, X, Y);
ImagePlus2.Canvas.CopyMode := cmSrcCopy; ImagePlus2.Canvas.StretchDraw(MyRect, ImagePlus1.Picture.Graphic); |
Kann diesen Code bitte jemand korrigieren? Ich habe schon alles mögliche versucht.
wulfskin - Di 14.11.06 19:28
Hey,
ich würde dir gerne Helfen, aber ich blick net, was du eigentlich willst. Du möchtest ein Bild verkleinern, aber die Proportionen erhalten? Dann sind die Stichworte doch StretchRect und ein ganz klein wenig Mathematik.
Gruß Hape!
galagher - Di 14.11.06 19:34
wulfskin hat folgendes geschrieben: |
Du möchtest ein Bild verkleinern, aber die Proportionen erhalten? Dann sind die Stichworte doch StretchRect und ein ganz klein wenig Mathematik. |
Aber wie?
Was muss ich machen, damit ein Bild verkleinert und proportional korrekt gezeichnet wird? Wo in meinem Code ist der Fehler?
StretchRect ? :gruebel:
wulfskin - Di 14.11.06 19:43
Eine Suche nach StretchRect hätte wohl gereicht :roll:!
Aus dem Kopf:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure Stretchbitmap(const AIn: TBitmap; const AScale: Double; out AOut: TBitmap); begin AOut.Width := Trunc(AIn.Width * AScale); AOut.Height := Trunc(AIn.Height * AScale); AOut.Canvas.StretchDraw(Rect(0, 0, AOut.Width, AOut.Height), AIn); end; |
Gruß Hape!
galagher - Di 14.11.06 19:50
Danke... In der Delphi-Hilfe hab' ich StrechRect nicht gefunden, und - ohne den Code jetzt getestet zu haben - es sind nicht unbedingt Bitmaps, die gezeichnet werden sollen, es können auch andere Grafikformate sein. Tatsache ist, dass ich einen Code brauche, der damit arbeitet!
Wenn jemand noch einen Tipp hat - ich komme nicht weiter! :(
wulfskin - Di 14.11.06 19:58
Bitte????
Der Code arbeitet mit allen Formaten die Delphi unterstützt, da du diese ja auch in Bitmap umwandeln können musst. Viele weitere findest du mit der Gaphic Lib (o.ä.) von Mike Lischke (soft-gems.net).
Gruß Hape!
galagher - Di 14.11.06 20:17
wulfskin hat folgendes geschrieben: |
Bitte????
Der Code arbeitet mit allen Formaten die Delphi unterstützt, da du diese ja auch in Bitmap umwandeln können musst. |
[Naiv on]: Stretchbitmap(ImagePlus1.Picture.Bitmap, 69, ImagePlus2.Picture.Bitmap); [Naiv off]
-> "Systemresourcen erschöpft".
Sorry, ich bin kein Grafikfreak; meine Frage war aber eigentlich (und ich will jetzt gar nicht noch nach weiteren Features von Mike Lischke googlen), was ist falsch an meinem Code? Dass das Prinzip richtig ist, denke ich ja schon, und ohne den entscheidenden Hinweis von jaenicke: ...
jaenicke hat folgendes geschrieben: |
Zum Thema: Die Quelltexte funktionieren alle, du machst nur einen Denkfehler! Du hast ja gar kein quadratisches Bild. Wenn du deses aber auf 69 mal 69 Pixel in ein quadratisches Format bringst (egal mit welchem der Quelltxte), dann ist es natürlich verzerrt.
Du musst das Seitenverhältnis beibehalten...
Beispiel:
Du hast ein Bild mit einr Größe von 690 mal 345 Pixeln. Dieses willst du ja nicht auf 69 mal 69, sondern auf 69 mal 34,5 Pixel, nur um 34,5 / 2, also um 17,25 Pixel nach unten versetzt haben (natürlich dann gerundet).
Schließlich sind im Originalbild doch keine Streifen oben und unten mit drin...
Auf die Zielhöhe von 34,5 kommst du mit 69 * 345 / 690. Davon nochmal die Hälfte muss das Bild nach unten verschoben werden. Um einen Integer-Wert zu erhalten kannst du auch statt dem / direkt ein div benutzen. |
... wäre ich wohl kaum soweit gekommen - an dieser Stelle schon mal vielen Dank!
Doch ich möchte gerne bei meinem, von jaenicke "inspiriertem" Code bleiben, aber er ist eben fehlerhaft. Trotzdem danke auch an wulfskin!
jaenicke - Di 14.11.06 22:26
Noch was zu den Problemen, die du noch hast:
Die weißen Streifen komme daher, dass du (wen ich das jetzt richtig sehe) in eine 69 mal 69 Bitmap das skalierte Bild schrebst und diese dann irgendwo einfügst. Was du eigentlich machen musst (ich dachte das würdest du dann selbst machen ;-)): Das Bild in diese Btmap ganz oben einfügen, die Höhe dieser Bitmap aber auf die korrekte Höhe setzen. Wenn du dann diese Bitmap wo einfügst, dann muss diese eben entsprechend weiter unten gezeichnet werden.
Da du die Bilder ja wohl abspeichern willst (kannst du ja ganz einfach in einem Stream machen, damit nur eine Datei ist...), müsstest du die halt skaliert speichern, in meinem Beispiel also in 69 mal 35. Dann müsstes du bei der Einblendung in eine andere Bitmap die Position um die Hälfte von (69 - Höhe des kleinen Bildes) nach unten setzen.
Was die Verzerrung angeht:
Ich vermute mal, das liegt am Runden der Höhe... Wenn die Verzerrung doch stärker ist, weiß ich jetzt nicht warum.
Dann poste doch mal ein Projekt, in dem ich das ausprobieren kann. (Oder schicks mir per ICQ oder E-Mail) Ich hab nämlich keine Lust, extra ein Testprojekt selbst zu schreiben... ;-)
Und ein Beispielbild, was da verzerrt wird, bräuchte ich auch.
galagher - Di 14.11.06 22:51
jaenicke hat folgendes geschrieben: |
Die weißen Streifen komme daher, dass du (wen ich das jetzt richtig sehe) in eine 69 mal 69 Bitmap das skalierte Bild schrebst und diese dann irgendwo einfügst. |
Position 0, 0, X, Y, wobei ich X und Y mit deinem Code berechne. Die weissen Streifen übermale ich vorher einfach ganz brutal mit Floodfill.
jaenicke hat folgendes geschrieben: |
Was du eigentlich machen musst (ich dachte das würdest du dann selbst machen ;-)): Das Bild in diese Btmap ganz oben einfügen, die Höhe dieser Bitmap aber auf die korrekte Höhe setzen. Wenn du dann diese Bitmap wo einfügst, dann muss diese eben entsprechend weiter unten gezeichnet werden. |
Also, das verstehe ich nun gar nicht... was ist die korrekte Höhe? Die des Originals? Und wie weiter unten zeichnen?
jaenicke hat folgendes geschrieben: |
Da du die Bilder ja wohl abspeichern willst (kannst du ja ganz einfach in einem Stream machen, damit nur eine Datei ist...) |
Darauf komme ich später eventuell zurück! Ich weiss noch nicht, wie ich das genau machen werde.
jaenicke hat folgendes geschrieben: |
Dann poste doch mal ein Projekt, in dem ich das ausprobieren kann. |
Hier - und danke schon mal!
DaKirsche - Mi 15.11.06 00:06
Naja, ich würde es eigentlich mal mit diesem Ansatz versuchen:
1. Bild in Miniatur laden
2. Thumbnail auf TBitMap prüfen
3. ggf. umwandeln
Danach in ein 69x69 Pixel großes, weiteres Image Jedes Pixel des Thumbs mit
Delphi-Quelltext
1: 2: 3:
| For (x:= 0 to ImageThumbFrom.width) do For For (y:= 0 to ImageThumbFrom.height) do ImageThumbToSave.Canvas.pixels[x,y] := ImageThumbFrom.Canvas.Pixels[x,y] |
versuchen.
Ist zwar umständlich, aber sollte gehen.
Damit nimmst du von jedem Pixel des Images, in dem die Miniatur liegt die Farbe und setzt diese Farbe am entsprechenden Pixel des neuen Images. Dieses Imgae ist 69x69 Pixel groß und kann dann auch so gespeichert werden. Natürlich ggf. vorher konvertiert in .JPEG oder .GIF.
ImageThumbToSave muss nicht unbedingt visible sein...kann also im Hintergrund ablaufen.
galagher - Mi 15.11.06 19:31
DaKirsche hat folgendes geschrieben: |
Damit nimmst du von jedem Pixel des Images, in dem die Miniatur liegt die Farbe und setzt diese Farbe am entsprechenden Pixel des neuen Images. Dieses Imgae ist 69x69 Pixel groß und kann dann auch so gespeichert werden. |
Damit kopieren ich das Bild 1:1 - Canvas "hat die Originalgrösse" des Bildes, dieses wird nur verkleinert dargestellt. Ich brauche ganz einfach eine Möglichkeit, die Ausmasse der Verkleinerung festzustellen.
Ich hatte aber einen hellen Moment :think: und habe Folgendes erdacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| var X, Y: Double; MyRect: TRect; begin ImagePlus2.Canvas.Brush.Color := clBtnFace; ImagePlus2.Canvas.FloodFill(0, 0, clBtnFace, fsBorder);
X := ImagePlus1.Picture.Width; Y := ImagePlus1.Picture.Height;
while (X > 69) or (Y > 69) do begin X := X / 1.0001; Y := Y / 1.0001; end;
MyRect := Rect(0, 0, Trunc(X), Trunc(Y));
ImagePlus2.Canvas.CopyMode := cmSrcCopy; ImagePlus2.Canvas.StretchDraw(MyRect, ImagePlus1.Picture.Graphic);
ImagePlus2.Picture.SaveToFile('d:\delphi6\projects\1.bmp');
LoadBitmapsFromFile('d:\delphi6\projects\1.bmp', ImageList1, 19098);
ImagePlus2.Picture.Bitmap.Width := Trunc(X); ImagePlus2.Picture.Bitmap.Height := Trunc(Y); end; |
So, und in irgendeiner .ini speichere ich dann die Werte von Trunc(X) und Trunc(Y), damit ich beim Einlesen der Thumbnails diese wieder in der Mitte ausgerichtet anzeigen kann, sonst sind die Bilder links und oben - der Rest ist ja mit FloodFill ausgemalt.
Am Besten wäre natürlich, anstatt zuerst in eine Datei zu speichern, in einen Stream zu schreiben. Ich weiss aber nicht, wie ich das anstellen soll, dass das Einlesen in ImageList1 aus einem Stream anstatt aus einer Datei klappt.
Für Verbesserungsvorschläge bin ich euch jedenfalls dankbar!
galagher - Mi 15.11.06 22:56
Habe die Lösung gefunden - das Ergebnis ist absolut akzeptabel, minimale Abweichungen (1-2 Pixel) ergeben sich wohl durch die Rundungen auf Ganzzahlen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| var X, Y: Double; L, T: Integer; MyRect: TRect; begin DestImagePlus.Canvas.Brush.Color := clBtnFace; DestImagePlus.Canvas.FloodFill(0, 0, clBtnFace, fsBorder);
X := SourceImagePlus.Picture.Width; Y := SourceImagePlus.Picture.Height;
while (X > 69) or (Y > 69) do begin X := X / 1.0001; Y := Y / 1.0001; end;
L := 69 mod Trunc(X) div 2; T := 69 mod Trunc(Y) div 2;
MyRect := Rect(L, T, Trunc(X)+L, Trunc(Y)+T);
DestImagePlus.Canvas.CopyMode := cmSrcCopy; DestImagePlus.Canvas.StretchDraw(MyRect, SourceImagePlus.Picture.Graphic);
DestImagePlus.Picture.SaveToFile('d:\delphi6\projects\1.bmp');
LoadBitmapsFromFile('d:\delphi6\projects\1.bmp', ImageList1, FileSizeByname('d:\delphi6\projects\1.bmp')); end; |
Geht vielleicht einfacher oder schneller, speziell die Divisionen mit 1.0001 gefallen mir nicht. Ich denke halt, mit so kleinen Werten erreiche ich eine höhere Genauigkeit.
Das alles muss noch ausgefeilt werden, aber ich glaube, so geht's! Danke an alle, die mir mit ihren Tipps geholfen haben - oft ist es nicht der Code, den man erhält, sondern die Gedankenanstösse, die einem weiterhelfen! Ich gebe aber zu, dass ich 69 mod Trunc(X) div 2 einfach mal so ausprobiert habe - also eher ein Zufallstreffer!
Es wäre dennoch eventuell eleganter, mit einem Stream zu arbeiten, vielleicht aber brauche ich doch eine Datei dazu, mal sehen.
wulfskin - Mi 15.11.06 23:29
Du bist witzig, StretchDraw hab ich dir schon ein paar Zeilen darüber vorgestellt... :evil:
So geht es halt, wann man steif an seiner Lösung festhielt, die erstens sehr langsam wäre und zweitens wohl nicht funktioniert hätte, da ein Image wohl nur zur Anzeige das Bild skaliert, intern aber die Orginalgröße behält.
Gruß Hape!
galagher - Do 16.11.06 18:02
wulfskin hat folgendes geschrieben: |
Du bist witzig, StretchDraw hab ich dir schon ein paar Zeilen darüber vorgestellt... :evil: |
Du hast aber "StretchRect" geschrieben; StrechDraw habe ich schon in meinem 1. Post benutzt!
wulfskin - Do 16.11.06 18:06
galagher hat folgendes geschrieben: |
Du hast aber "StretchRect" geschrieben; StrechDraw habe ich schon in meinem 1. Post benutzt! |
Siehe Quelltext...
galagher - Do 16.11.06 22:30
wulfskin hat folgendes geschrieben: |
Siehe Quelltext... |
Wer lesen kann ist klar im Vorteil! :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!