ฉันสามารถแสดง JPG หรือ PNG ไปยัง framebuffer (/ dev / fb *) ได้อย่างไร


19

ฉันรู้ว่าฉันสามารถจับภาพ framebuffer ในลินุกซ์ใช้สิ่งที่ต้องการและอีกครั้งที่แสดงโดยการเผชิญปัญหากลับไปยังอุปกรณ์เช่นดังนั้นcp /dev/fb0 ~/myimage cp ~/myimage /dev/fb0ข้อมูลรูปภาพ framebuffer อยู่ในรูปแบบใด และฉันจะแสดงรูปภาพที่สร้างไว้ล่วงหน้า (jpg, png) ไปยัง framebuffer ได้อย่างไร? ฉันสามารถแปลงเป็นรูปแบบนี้โดยใช้ imagemagick ได้หรือไม่

ps ฉันใช้ราสเบอร์รี่ pi ใช้ raspbian



อัปเดต 11-12-2012

ฉันลงเอยด้วยการใช้pygameเพื่อแสดงภาพในแอปพลิเคชันของฉัน ไม่แน่ใจว่าสิ่งนี้ใช้เฟรมบัฟเฟอร์เพื่อแสดงภาพ แต่มันก็ตอบสนองความต้องการของฉันได้ค่อนข้างดี

คำตอบ:


8

คุณลองFbida แล้วหรือยัง?

fbidaบรรจุfbi, โปรแกรมดูรูปภาพสำหรับ framebuffer

เชื่อมโยงไปยังfbiหน้าคน - http://manpages.ubuntu.com/manpages/lucid/man1/fbi.1.html

PS - ฉันไม่แน่ใจว่ามันจะทำงานใน Raspbian


น่าเสียดายที่มันเป็นไปไม่ได้ที่จะป้องกันไม่ให้ 'fbi' แสดงแถบสถานะที่ด้านล่างของหน้าจอ นี่เป็นเพียงส่วนหนึ่งของ showstopper สำหรับแอปพลิเคชั่นต่าง ๆ ...
Jules

3
@Jules บน Debian 8 (ทดสอบ) มี-noverboseตัวเลือกที่ทำให้มันแสดงเฉพาะภาพเอง; อย่างไรก็ตามสิ่งนี้ไม่ได้จัดทำเป็นเอกสารไว้ใน man page แต่จะอยู่ใน "การใช้งาน:" สำหรับมันเท่านั้น
Abbafei

มันใช้งานได้หรือไม่ ก่อนหน้านี้ฉันได้สร้างสำเนาจากแหล่งที่มาบนหน้าเว็บของผู้เขียนและมีตัวเลือก แต่ตัวเลือกนั้นดูเหมือนจะไม่ทำอะไรเลยในรุ่นนั้น
จูลส์

@Jules -noverboseทำงานสำหรับฉันใช้fbiใน raspbian apt-get install fbiเมื่อติดตั้งได้โดยใช้
D. Woods


2

ข้อมูลรูปภาพ framebuffer อยู่ในรูปแบบใด

เอกสารคู่มือ Linux kernel 4.2 https://github.com/torvalds/linux/blob/v4.2/Documentation/fb/api.txt#45พูดว่า:

พิกเซลจะถูกเก็บไว้ในหน่วยความจำในรูปแบบขึ้นอยู่กับฮาร์ดแวร์ แอปพลิเคชันจำเป็นต้องทราบถึงรูปแบบการจัดเก็บพิกเซลเพื่อเขียนข้อมูลภาพไปยังหน่วยความจำบัฟเฟอร์เฟรมในรูปแบบที่ฮาร์ดแวร์คาดไว้

รูปแบบถูกอธิบายโดยประเภทบัฟเฟอร์เฟรมและภาพ ภาพบางภาพต้องการข้อมูลเพิ่มเติมซึ่งถูกเก็บไว้ในข้อมูลบิตของหน้าจอตัวแปร bits_per_pixel, โทนสีเทา, สีแดง, สีเขียว, สีฟ้าและฟิลด์ transp

ภาพอธิบายวิธีการเข้ารหัสและประกอบข้อมูลสีเพื่อสร้าง macropixels ชนิดอธิบายถึงวิธีการจัดเก็บ macropixels ในหน่วยความจำ รองรับประเภทและภาพต่อไปนี้

รายการภาพและประเภทเป็นไปตาม แต่คำอธิบายนั้นไม่เพียงพอสำหรับฉันที่จะเข้าใจรูปแบบที่แน่นอนทันที


1
@ ผู้ลงคะแนนเสียงโปรดอธิบายเพื่อที่ฉันจะได้เรียนรู้และปรับปรุงข้อมูล ฉันไม่เคยตอบโต้ ขอบคุณ
Ciro Santilli 事件改造中心法轮功六四事件

1

หากคุณต้องการcp /dev/fb0 ~/myimageรูปภาพควรมีข้อมูลพิกเซลเท่านั้นและลำดับควรถูกต้อง ( RGB, BGR, RGBA, ARGB... )

ฉันต้องการทำเช่นนี้ แต่ไม่พบเครื่องมือที่เหมาะสมดังนั้นฉันจึงใช้ python เพื่อช่วยฉันทำรูปภาพล่วงหน้า คุณสามารถลองนี้



0

ดู /usr/include/linux/fb.h ที่ structs เช่น fb_var_screeninfo สามารถมีความลึกของสีและรูปแบบที่หลากหลาย ฉันเห็น 16 บิต / พิกเซลบ่อยเกินไปตอนนี้ฉันมี 32. พิมพ์ fbset ด้วยตัวเองและมันจะแสดงการตั้งค่าปัจจุบัน ซึ่งเกือบจะเป็นหนึ่งในรายการใน /etc/fb.modes

upstairs# fbset

mode "1920x1080"
    geometry 1920 1080 1920 1080 32
    timings 0 0 0 0 0 0 0
    rgba 8/16,8/8,8/0,8/24
endmode

Imagemagick อาจทำงานได้ถ้าคุณสามารถทำให้มันตรงกับโหมดที่คุณต้องการ ฉันอาจจะเขียนอะไรบางอย่างใน C, โหลหรือมากกว่านั้นสายที่เรียก libjpeg หรือ libpng สามารถแตกภาพลงในหน่วยความจำอาร์เรย์ บิต / สีของคุณ ฯลฯ ต้องตรงกันหรือคุณต้องเขียนบางอย่างเพื่อแปลง ประสบการณ์ที่ดี.

นอกจากนี้แทนที่จะอ่าน / เขียน / dev / fb0 เป็นไฟล์ให้เปิด () เพื่อรับไฟล์ descriptor แล้ว mmap () เพื่อให้คุณทำงานกับตัวชี้ไปยังหน่วยความจำ มันเร็วกว่าในการถ่ายโอนอย่างน้อย 10 เท่า

แต่สำหรับการวางภาพบนหน้าจอฉันเพิ่งติดตั้ง qiv จากนั้นกดปุ่ม F1 เพื่อขอความช่วยเหลือ แต่ x ในขณะที่แสดงภาพจะเขียนลงในหน้าต่างรูตแบบกึ่งถาวรหากนั่นคือสิ่งที่คุณต้องการ หรือเพียงแค่ตั้งเป็นภาพพื้นหลังในการตั้งค่าเดสก์ท็อปและมันจะปรากฏขึ้นทุกครั้งที่บูต


ARGB ของฉันเห็นได้ชัด (Raspbian) ฉันเริ่มต้นด้วยสีประเภท HTML จากเครื่องมือเลือกสี GIMP ใช้เวลา 4 ครั้งในการทำให้ถูกต้อง
อลันคอเรย์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.