mirror of
https://github.com/vlang/v.git
synced 2025-09-15 07:22:27 +03:00

Some checks failed
Graphics CI / gg-regressions (push) Waiting to run
vlib modules CI / build-module-docs (push) Waiting to run
native backend CI / native-backend-ubuntu (push) Waiting to run
vab CI / v-compiles-os-android (push) Waiting to run
native backend CI / native-backend-windows (push) Waiting to run
Shy and PV CI / v-compiles-puzzle-vibes (push) Waiting to run
Sanitized CI / sanitize-undefined-clang (push) Waiting to run
Sanitized CI / sanitize-undefined-gcc (push) Waiting to run
Sanitized CI / tests-sanitize-address-clang (push) Waiting to run
Sanitized CI / sanitize-address-msvc (push) Waiting to run
Sanitized CI / sanitize-address-gcc (push) Waiting to run
Sanitized CI / sanitize-memory-clang (push) Waiting to run
sdl CI / v-compiles-sdl-examples (push) Waiting to run
Time CI / time-linux (push) Waiting to run
Time CI / time-macos (push) Waiting to run
Time CI / time-windows (push) Waiting to run
toml CI / toml-module-pass-external-test-suites (push) Waiting to run
Tools CI / tools-linux (clang) (push) Waiting to run
Tools CI / tools-linux (gcc) (push) Waiting to run
Tools CI / tools-linux (tcc) (push) Waiting to run
Tools CI / tools-macos (clang) (push) Waiting to run
Tools CI / tools-windows (gcc) (push) Waiting to run
Tools CI / tools-windows (msvc) (push) Waiting to run
Tools CI / tools-windows (tcc) (push) Waiting to run
Tools CI / tools-docker-ubuntu-musl (push) Waiting to run
vab CI / vab-compiles-v-examples (push) Waiting to run
wasm backend CI / wasm-backend (ubuntu-22.04) (push) Waiting to run
wasm backend CI / wasm-backend (windows-2022) (push) Waiting to run
Workflow Lint / lint-yml-workflows (push) Has been cancelled
74 lines
1.4 KiB
V
74 lines
1.4 KiB
V
module img
|
|
|
|
import gg
|
|
import os
|
|
import sim
|
|
|
|
@[params]
|
|
pub struct ImageSettings {
|
|
pub:
|
|
width int = sim.default_width
|
|
height int = sim.default_height
|
|
cache_size int = 200
|
|
}
|
|
|
|
pub fn new_image_settings(settings ImageSettings) ImageSettings {
|
|
return ImageSettings{
|
|
...settings
|
|
}
|
|
}
|
|
|
|
pub fn image_settings_from_grid(grid sim.GridSettings) ImageSettings {
|
|
return ImageSettings{
|
|
width: grid.width
|
|
height: grid.height
|
|
}
|
|
}
|
|
|
|
pub fn (s ImageSettings) to_grid_settings() sim.GridSettings {
|
|
return sim.GridSettings{
|
|
width: s.width
|
|
height: s.height
|
|
}
|
|
}
|
|
|
|
pub struct PPMWriter {
|
|
mut:
|
|
file os.File
|
|
cache []u8
|
|
cache_size int
|
|
}
|
|
|
|
pub fn ppm_writer_for_fname(fname string, settings ImageSettings) !&PPMWriter {
|
|
mut writer := &PPMWriter{
|
|
cache_size: settings.cache_size
|
|
cache: []u8{cap: settings.cache_size}
|
|
}
|
|
writer.start_for_file(fname, settings)!
|
|
return writer
|
|
}
|
|
|
|
pub fn (mut writer PPMWriter) start_for_file(fname string, settings ImageSettings) ! {
|
|
writer.file = os.create(fname)!
|
|
writer.file.writeln('P6 ${settings.width} ${settings.height} 255')!
|
|
}
|
|
|
|
pub fn (mut writer PPMWriter) handle_pixel(p gg.Color) ! {
|
|
if writer.cache.len >= writer.cache_size {
|
|
writer.write()!
|
|
writer.flush()!
|
|
}
|
|
writer.cache << [p.r, p.g, p.b]
|
|
}
|
|
|
|
pub fn (mut writer PPMWriter) flush() ! {
|
|
writer.cache.clear()
|
|
}
|
|
|
|
pub fn (mut writer PPMWriter) write() ! {
|
|
writer.file.write(writer.cache)!
|
|
}
|
|
|
|
pub fn (mut writer PPMWriter) close() {
|
|
writer.file.close()
|
|
}
|