#706 fixed histogram byte count, aligned luminance formula
This commit is contained in:
parent
da38e4a4ed
commit
2e13879d77
2 changed files with 12 additions and 11 deletions
|
@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file.
|
|||
|
||||
### Added
|
||||
|
||||
- Viewer: optional histogram (for real this time)
|
||||
- Collection: allow hiding thumbnail overlay HDR icon
|
||||
- Collection: allow setting any filtered collection as home page
|
||||
|
||||
|
|
|
@ -42,16 +42,13 @@ mixin HistogramMixin {
|
|||
final blueLevels = List.filled(bins, 0);
|
||||
|
||||
final view = Uint8List.view(data.buffer);
|
||||
final pixelCount = view.length / 4;
|
||||
for (var i = 0; i < pixelCount; i += 4) {
|
||||
final viewSize = view.length;
|
||||
for (var i = 0; i < viewSize; i += 4) {
|
||||
final a = view[i + 3];
|
||||
if (a > 0) {
|
||||
final r = view[i + 0];
|
||||
final g = view[i + 1];
|
||||
final b = view[i + 2];
|
||||
redLevels[r]++;
|
||||
greenLevels[g]++;
|
||||
blueLevels[b]++;
|
||||
redLevels[view[i + 0]]++;
|
||||
greenLevels[view[i + 1]]++;
|
||||
blueLevels[view[i + 2]]++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,14 +72,17 @@ mixin HistogramMixin {
|
|||
const normMax = bins - 1;
|
||||
|
||||
final view = Uint8List.view(data.buffer);
|
||||
final pixelCount = view.length / 4;
|
||||
for (var i = 0; i < pixelCount; i += 4) {
|
||||
final viewSize = view.length;
|
||||
for (var i = 0; i < viewSize; i += 4) {
|
||||
final a = view[i + 3];
|
||||
if (a > 0) {
|
||||
final r = view[i + 0];
|
||||
final g = view[i + 1];
|
||||
final b = view[i + 2];
|
||||
lumLevels[(Color.fromARGB(a, r, g, b).computeLuminance() * normMax).round()]++;
|
||||
// `Color.computeLuminance()` is more accurate, but slower
|
||||
// and photo software typically use the simpler formula
|
||||
final luminance = (r * 0.3 + g * 0.59 + b * 0.11) / 255;
|
||||
lumLevels[(luminance * normMax).round()]++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue