การแก้ไขส่วนหัวภาพ BMP เพื่อเพิ่มความสูงและความกว้างของภาพ


0

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

นี่คือสิ่งที่ฉันสามารถค้นหาได้:

typedef struct tagBITMAPINFOHEADER {
  DWORD biSize;
  LONG  biWidth;
  LONG  biHeight;
  WORD  biPlanes;
  WORD  biBitCount;
  DWORD biCompression;
  DWORD biSizeImage;
  LONG  biXPelsPerMeter;
  LONG  biYPelsPerMeter;
  DWORD biClrUsed;
  DWORD biClrImportant;
  } BITMAPINFOHEADER, *PBITMAPINFOHEADER;

ปัญหาคือฉันไม่เข้าใจสิ่งนี้มากพอที่จะสามารถแก้ไขข้อมูลฐานสิบหกของภาพ BMP นี้เพื่อเพิ่มความสูงและขนาด ใครช่วยกรุณาบอกฉันว่าฉันสามารถเพิ่มความสูงและความกว้างเป็น 100 เท่าได้อย่างไร ฉันไม่จำเป็นต้องทำสิ่งนี้โดยใช้โปรแกรมหรืออะไรฉันสามารถเปลี่ยนมันได้ด้วยตนเองถ้าฉันรู้ว่าอยู่ที่ไหน

ป้อนคำอธิบายรูปภาพที่นี่


หากไม่มีการแก้ไขข้อมูลภาพเป็นไปไม่ได้
ilkhd

1
การปรับขนาดเป็นมากกว่าการสลับค่าสองค่า คุณจะต้องแทรกข้อมูลพิกเซล หากคุณต้องการขยายขนาดด้วยตนเอง (แทนที่จะเพิ่มข้อมูลขยะ) เราจะพบคุณในอีกสิบปี นอกจากนี้หากคุณไม่ทราบว่า DWORD คืออะไรหรือเกี่ยวข้องกับโครงสร้างของไฟล์บนดิสก์อย่างไรคุณควรเริ่มการวิจัยที่นั่น
Yorik

@ Yorik ขอบคุณสำหรับการป้อนข้อมูลของคุณ ฉันใช้เครื่องมือแก้ไข GIMP เพื่อ 'ปรับขนาด' รูปภาพ เพิ่มความกว้างและความสูง 100 เท่าและ 'ส่งออก' ภาพที่ได้ ตอนนี้ฉันกำลังพยายามเข้ารหัสภาพใหม่นี้ในรูปหกเหลี่ยม ฉันพบ AA.BB.CC ที่ทำซ้ำมากมาย ... ฯลฯ ฉันคิดว่ามันเป็นส่วนหนึ่งของการเข้ารหัส คุณบอกฉันได้ไหมว่าจะเกิดอะไรขึ้นเมื่อ GIMP ปรับขนาดภาพ มันเพิ่มค่าขยะหรือไม่ เพราะเมื่อฉันดูไฟล์ใหม่ฉันจะเห็นรูปแบบมากกว่าขยะ
learnerX

คุณบอกว่าคุณต้องการที่จะทำด้วยตนเอง คุณสามารถเติมให้เป็นศูนย์ได้ แต่การปรับขนาด x2 หมายถึงการกระจายพิกเซลและการแทรกข้อมูลใหม่ระหว่างค่าเหล่านั้นโดยการหาค่าเฉลี่ย เห็นได้ชัดว่า "ด้วยตนเอง" สิ่งนี้จะทำให้เสียเวลามากด้วยเครื่องคิดเลขและการป้อนข้อมูลด้วยตนเองด้วยเครื่องมือแก้ไข HEX
Yorik

1
เมื่อปรับขนาดคุณกำลังทำการแก้ไข โดยทั่วไป bicubic ( en.wikipedia.org/wiki/Bicubic_interpolation ) ข้อมูลบิตแมปสามารถจัดเก็บเป็นจานสีที่ชัดเจนพร้อมค่าสีโดยพลการและดัชนีการค้นหาและ 1 ช่องสัญญาณ หรือเป็นจานสีเทาเฉดสีนัยและ 3 ช่องทาง (RGB)
Yorik

คำตอบ:


0

หนึ่งสามารถแทรก / ขยายข้อมูลพิกเซล นั่นคือคือ - ทำซ้ำแต่ละพิกเซลในแนวนอนและแนวตั้ง - จากนั้นเปลี่ยน BITMAPINFOHEADER และ BITMAPFILEHEADER เป็นค่าใหม่ แม้ว่าหนึ่งจะต้องเขียนโปรแกรมง่าย ๆ เนื่องจากการแทรกด้วยตนเองจะทำไม่ได้ ลิงค์ด้านล่างนี้เป็นวิดีโอ YouTube ที่มีพื้นหลังในการปรับขนาดและ BITMAPINFOHEADER, BITMAPFILEHEADER: https://www.youtube.com/watch?v=g8LEbJapnj8


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