Autor |
Beitrag |
shana-chan
Beiträge: 17
|
Verfasst: Sa 10.03.18 00:22
Ich habe Schwierigkeiten ein Bild hoch zu skalieren.
Ich versuche dafür StretchBlt mit HALFTONE zu verwenden.
Das Das Eingangsbild ist 8x8 Pixel groß. und die Ausgabe sieht aus als währe sie immer noch 8x8 Pixel groß aber wurde trotzdem teilweise weich gezeichnet. (siehe Bild)
Hier mein Code:
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:
| procedure TForm1.FormCreate(Sender: TObject); begin image1.Picture.Bitmap.Height:=8; image1.Picture.Bitmap.Width:=8; image2.Picture.Bitmap.Height:=image2.Height; image2.Picture.Bitmap.Width:=image2.Width; end;
procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; begin
image1.Picture.Bitmap.Canvas.Pixels[random(8),random(8)]:=RGB(255,0,0); image1.Picture.Bitmap.Canvas.Pixels[random(8),random(8)]:=RGB(255,255,255);
SetStretchBltMode(image2.Picture.Bitmap.Canvas.Handle,HALFTONE); StretchBlt(image2.Picture.Bitmap.Canvas.Handle,0,0,image2.Picture.Bitmap.Width,image2.Picture.Bitmap.Height, image1.Picture.Bitmap.Canvas.Handle,0,0,image1.Picture.Bitmap.Width,image1.Picture.Bitmap.Height,SRCCOPY);
for i:=0 to image1.Height do image1.Picture.Bitmap.Canvas.Pixels[i,i]:=RGB(0,255,0); for i:=0 to image2.Height do image2.Picture.Bitmap.Canvas.Pixels[i,i]:=RGB(0,0,255);
end; |
Mach ich irgendwas Falsch?
Einloggen, um Attachments anzusehen!
|
|
Symbroson
Beiträge: 382
Erhaltene Danke: 67
Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
|
Verfasst: Sa 10.03.18 09:48
Warum so kompliziert? StrechDraw funktioniert bei mir genauso gut / besser:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; begin timer1.Enabled := false;
for i:=0 to image1.Height do begin image1.Picture.Bitmap.Canvas.Pixels[random(8),random(8)] := $ff; image1.Picture.Bitmap.Canvas.Pixels[random(8),random(8)] := $ff; end;
image2.Canvas.StretchDraw(Rect(0, 0, image2.Width, image2.Height), image1.Picture.Bitmap);
for i:=0 to image1.Height do image1.Picture.Bitmap.Canvas.Pixels[i,i] := $ff00; for i:=0 to image2.Height do image2.Picture.Bitmap.Canvas.Pixels[i,i] := $ff0000; end; |
_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
|
|
shana-chan
Beiträge: 17
|
Verfasst: So 11.03.18 02:01
Ich hatte vergessen zu erwähnen dass das Bild weichgezeichnet werden soll. Und nicht einfach nur die Pixel vergrößert werden sollen. Ich stelle mir das so vor wie in diesem Bild: (mit externem Tool bearbeitet)
Deswegen so kompliziert mit StretchBlt und HALFTONE.
EDIT: Ich denke ich habe falsch verstanden wie StretchBlt/HALFTONE funktioniert. Das scheint nur für das verkleinern von Bildern geeignet zu sein. Zum vergrößern muss man sich wohl selbst was ausdenken.
Einloggen, um Attachments anzusehen!
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 11.03.18 06:33
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Symbroson
Beiträge: 382
Erhaltene Danke: 67
Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
|
Verfasst: So 11.03.18 09:14
Den Effekt den du suchst heißt übrigens Antialiasing
Vllt findest du hier etwas hilfreiches:
stackoverflow.com/qu...unction-for-delphi-7
_________________ most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
|
|
|