freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2-demos] master 9f86444: [ftinspect] Support gray level scaling


From: Werner Lemberg
Subject: [freetype2-demos] master 9f86444: [ftinspect] Support gray level scaling.
Date: Wed, 15 Mar 2023 00:59:21 -0400 (EDT)

branch: master
commit 9f864441089971c002790314c724501357980c52
Author: Charlie Jiang <w@chariri.moe>
Commit: Werner Lemberg <wl@gnu.org>

    [ftinspect] Support gray level scaling.
    
    See commit 746d5be5: Convert to 256 grays. Slightly tweaked code style.
    
    * src/ftinspect/engine/rendering.cpp (RenderingEngine::convertBitmapTo8Bpp):
    Implement it.
---
 src/ftinspect/engine/rendering.cpp | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/src/ftinspect/engine/rendering.cpp 
b/src/ftinspect/engine/rendering.cpp
index 524f0a5..1c14dea 100644
--- a/src/ftinspect/engine/rendering.cpp
+++ b/src/ftinspect/engine/rendering.cpp
@@ -143,6 +143,26 @@ RenderingEngine::convertBitmapTo8Bpp(FT_Bitmap* bitmap)
   {
     // XXX handling?
   }
+
+  if (out.num_grays == 256)
+    return out;
+
+  // Also scale gray values.
+  auto buf = reinterpret_cast<uint32_t*>(out.buffer);
+  uint32_t scale = 255U / (out.num_grays - 1);
+
+  // Four bytes at a time.
+  unsigned i = 0;
+  unsigned size = std::abs(out.pitch) * out.rows;
+  for (; i <= size - 4; i += 4, buf++)
+    *buf *= scale;
+
+  // The remaining bytes.
+  for (; i < size; i++ )
+    out.buffer[i] *= scale;
+
+  out.num_grays = 256;
+
   return out;
 }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]