#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
|
### Added
|
||||||
|
|
||||||
|
- Viewer: optional histogram (for real this time)
|
||||||
- Collection: allow hiding thumbnail overlay HDR icon
|
- Collection: allow hiding thumbnail overlay HDR icon
|
||||||
- Collection: allow setting any filtered collection as home page
|
- Collection: allow setting any filtered collection as home page
|
||||||
|
|
||||||
|
|
|
@ -42,16 +42,13 @@ mixin HistogramMixin {
|
||||||
final blueLevels = List.filled(bins, 0);
|
final blueLevels = List.filled(bins, 0);
|
||||||
|
|
||||||
final view = Uint8List.view(data.buffer);
|
final view = Uint8List.view(data.buffer);
|
||||||
final pixelCount = view.length / 4;
|
final viewSize = view.length;
|
||||||
for (var i = 0; i < pixelCount; i += 4) {
|
for (var i = 0; i < viewSize; i += 4) {
|
||||||
final a = view[i + 3];
|
final a = view[i + 3];
|
||||||
if (a > 0) {
|
if (a > 0) {
|
||||||
final r = view[i + 0];
|
redLevels[view[i + 0]]++;
|
||||||
final g = view[i + 1];
|
greenLevels[view[i + 1]]++;
|
||||||
final b = view[i + 2];
|
blueLevels[view[i + 2]]++;
|
||||||
redLevels[r]++;
|
|
||||||
greenLevels[g]++;
|
|
||||||
blueLevels[b]++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,14 +72,17 @@ mixin HistogramMixin {
|
||||||
const normMax = bins - 1;
|
const normMax = bins - 1;
|
||||||
|
|
||||||
final view = Uint8List.view(data.buffer);
|
final view = Uint8List.view(data.buffer);
|
||||||
final pixelCount = view.length / 4;
|
final viewSize = view.length;
|
||||||
for (var i = 0; i < pixelCount; i += 4) {
|
for (var i = 0; i < viewSize; i += 4) {
|
||||||
final a = view[i + 3];
|
final a = view[i + 3];
|
||||||
if (a > 0) {
|
if (a > 0) {
|
||||||
final r = view[i + 0];
|
final r = view[i + 0];
|
||||||
final g = view[i + 1];
|
final g = view[i + 1];
|
||||||
final b = view[i + 2];
|
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