Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Vielfaches der Zahl 4 an Pixel einer Bitmap (https://www.delphipraxis.net/202574-vielfaches-der-zahl-4-pixel-einer-bitmap.html)

Gyrospeter 19. Nov 2019 08:52

Vielfaches der Zahl 4 an Pixel einer Bitmap
 
Guten Morgen liebe Delphi-Gemeinde,

ich habe hier eine Aufgabe vor mir, bei der ich mittels einer Checkbox meinen zuvor selektierten Ausschnitt einer Bitmap um ein Vielfaches von 4 anzeigen lassen möchte. Das klappt bis jetzt ganz gut, allerdings wird dabei immer aufgerundet bzw. hab ich mich für die Variante entschieden, immer den Bereich um das nächste Vielfache von 4 zu vergrößern.

Im nächsten Schritt möchte ich aber, dass der Code sich entscheidet auf- oder abzurunden, je nachdem ob man nach oben oder unten hin näher ein einem Vielfachen ist. Die Lösung scheint wohl banal zu sein, allerdings komme ich nicht so wirklich drauf... über einige Denkanstöße wäre ich dankbar :)

Delphi-Quellcode:
if CheckBox1.Checked then
 begin
   if FTexturBitmap.Width mod 4 <> 0 then
     cxImage1.Picture.Bitmap.Width := (cxImage1.Picture.Bitmap.Width or 3) + 1;
   if FTexturBitmap.Height mod 4 <> 0 then
     cxImage1.Picture.Bitmap.Height := (cxImage1.Picture.Bitmap.Height or 3) + 1;
 end;

Moombas 19. Nov 2019 09:21

AW: Vielfaches der Zahl 4 an Pixel einer Bitmap
 
Zunächst mal würde ich deine Bedingung anders aufbauen:
Delphi-Quellcode:
if CheckBox1.Checked then
begin
  if (FTexturBitmap.Width mod 4 <> 0) and
     (FTexturBitmap.Height mod 4 <> 0) then
  begin
     cxImage1.Picture.Bitmap.Width := (cxImage1.Picture.Bitmap.Width or 3) + 1;
     cxImage1.Picture.Bitmap.Height := (cxImage1.Picture.Bitmap.Height or 3) + 1;
  end;
end;
Sonst verzerrst du im schlimmsten Fall das Bild (z.B. Breite wird angepasst aber Höhe bleibt, da du beides getrennt betrachtest).

Frage zum Denkanstoß: Es wäre ja Sinnvoll beides zu betrachten (Höhe und Breite; Verzerrung!) oder soll hierbei beides unabhängig betrachtet werden (keine Verzerrung)?
Ich gehe aktuell mal davon aus. Ich würde davür auf funktionen schreiben, damit du Abhängigkeiten prüfen kannst und es nicht jedesmal 1:1 reinkopieren musst.

Gyrospeter 19. Nov 2019 09:36

AW: Vielfaches der Zahl 4 an Pixel einer Bitmap
 
Zitat:

Zitat von Moombas (Beitrag 1451543)
Frage zum Denkanstoß: Es wäre ja Sinnvoll beides zu betrachten (Höhe und Breite; Verzerrung!) oder soll hierbei beides unabhängig betrachtet werden (keine Verzerrung)?

Beides sollte betrachtet werden, also die Höhe und die Breite. Passt zb. die Breite schon von Haus aus durch die Selektion, dann bleibt diese unverändert und lediglich die Höhe wird nach oben oder unten hin, je nachdem ob man oben oder unten näher an einem Vielfachen ist, verändert :)

Medium 19. Nov 2019 09:54

AW: Vielfaches der Zahl 4 an Pixel einer Bitmap
 
Meine Idee:

Delphi-Quellcode:
if CheckBox1.Checked then
 begin
   if FTexturBitmap.Width mod 4 <> 0 then
     cxImage1.Picture.Bitmap.Width := Round(cxImage1.Picture.Bitmap.Width / 4) * 4;
   if FTexturBitmap.Height mod 4 <> 0 then
     cxImage1.Picture.Bitmap.Height := Round(cxImage1.Picture.Bitmap.Height / 4) * 4;
 end;

Gyrospeter 19. Nov 2019 10:08

AW: Vielfaches der Zahl 4 an Pixel einer Bitmap
 
Zitat:

Zitat von Medium (Beitrag 1451548)
Meine Idee:

Delphi-Quellcode:
if CheckBox1.Checked then
 begin
   if FTexturBitmap.Width mod 4 <> 0 then
     cxImage1.Picture.Bitmap.Width := Round(cxImage1.Picture.Bitmap.Width / 4) * 4;
   if FTexturBitmap.Height mod 4 <> 0 then
     cxImage1.Picture.Bitmap.Height := Round(cxImage1.Picture.Bitmap.Height / 4) * 4;
 end;

Vielen lieben Dank, funktioniert!

Wäre da alleine wohl schwerlich draufgekommen :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz