Autor Beitrag
shana-chan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Sa 10.03.18 01: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)
user defined image


Hier mein Code:
ausblenden 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;
  //image1.Picture.Bitmap.PixelFormat:=pf32Bit;
  //image2.Picture.Bitmap.PixelFormat:=pf32Bit;
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);
  //SetStretchBltMode(image2.Picture.Bitmap.Canvas.Handle,COLORONCOLOR);
  //Caption:=inttostr(GetStretchBltMode(image2.Picture.Bitmap.Canvas.Handle));
  //SetBrushOrgEx(image2.Picture.Bitmap.Canvas.Handle,0,0,nil);
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Sa 10.03.18 10:48 
Warum so kompliziert? StrechDraw funktioniert bei mir genauso gut / besser:

ausblenden 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;

  //zufälliges Bild aus roten pixeln generieren
  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(00, image2.Width, image2.Height), image1.Picture.Bitmap);

  //diagonalen
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: So 11.03.18 03: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)
sbhttstz1m

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



BeitragVerfasst: So 11.03.18 07:33 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: So 11.03.18 10: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)