如何在Godot 4.2.2中创建图像并另存为jpg?

问题描述 投票:0回答:1

戈多4.2.2 操作系统:Mac 14.5 (23F79) 芯片:Apple M2 Pro

我尝试动态创建图像并将其保存为.jpg图像。

func _ready():
    var user_data_dir = OS.get_user_data_dir()
    print("User data directory:", user_data_dir)

    # Create a new image with specified width, height, and format
    var image = Image.new()
    image.create(256, 256, false, Image.FORMAT_RGB8)  # Creating a 256x256 image with RGB format
    
    # Fill the image with black
    image.fill(Color.BLACK)  # Fill the entire image with black color
    
    # Check if the image is empty (filled it with black); i don't think this is necessary but just checking
    var is_empty = true
    for y in range(image.get_height()):
        for x in range(image.get_width()):
            var pixel_color = image.get_pixel(x, y)
            if pixel_color != Color.TRANSPARENT:  # Check against black color with transparent
                is_empty = false
                break
        if not is_empty:
            break

    if is_empty:
        print("The image is empty.")
    else:
        print("The image is not empty.")

    # Save the image as a JPG file
    var file_path_jpg = user_data_dir + "/black_image2.jpg"
    var result_jpg = image.save_jpg(file_path_jpg)

    if result_jpg == OK:
        print("JPG saved successfully at: ", file_path_jpg)
    else:
        print("Failed to save JPG. Error code: ", str(result_jpg))

    # Verify if the file exists
    var jpg_exists = FileAccess.file_exists(file_path_jpg)
    print("JPG exists: ", str(jpg_exists))
Output Log:
User data directory:/Users/xxxx/Library/Application Support/Godot/app_userdata/game
The image is empty.
Failed to save JPG. Error code: 31
JPG exists: true

甚至认为文件创建为空。

我尝试创建一个 RGB8 图像,用颜色填充它,然后保存它。但由于某种原因,保存的文件是空的。知道为什么会发生这种情况吗?

注意:从 Unity 切换过来后,我在过去两周里一直在学习 Godot,所以如果这是一个新手问题,请耐心等待。谢谢!

我还尝试保存 png 文件,它甚至没有创建 png 文件,但我尝试使用 .jpg 它创建了文件,但数据为空。我写的所有代码都在详细部分和输出日志中。

我想创建图像,在图像中写一些东西并保存该图像就是这样。

2d godot gdscript godot4
1个回答
0
投票

我自己没有测试过,但我 90% 确定问题出在这一行:

var image = Image.new()
image.create(256, 256, false, Image.FORMAT_RGB8)

问题在于 Image.create() 是返回图像的静态方法。这意味着你应该这样做:

var image = Image.create(256, 256, false, Image.FORMAT_RGB8)

您现在拥有的代码将所有内容分配给一个空的“图像”变量,因为 Image.Create() 返回新图像,如果您按照编写的方式在实例上调用它,则它不会应用它

© www.soinside.com 2019 - 2024. All rights reserved.