شما اول باید مشخص کنید کدام فرمت را می خواهید باز و سپس تغییرات انجام دهید ، بعد باید به سایت شرکت سازنده یا هر مرجه دیگری مراجعه کنید تا از نحوه ذخیره سازی و فشرده سازی آن فرمت آگاه شوید.
مثلا یک فایل BMP از ابتدای آن تا انتهای فایل شامل موارد زیر است.
file header
information header
color table
pixel bits
در ویندوز و از طریق GDI به این شکل عمل می کنیم:
ابتدا فایل را باز می کنیم (یعنی همان خواندن دودویی)و اشاره گری به struct آن می سازیم. (در سایر فرمت ها باید از struct ای استفاده کنید که شرکت سازنده معرفی کرده باشد)
BITMAPFILEHEADER * pbmfh = LoadImageFunction (szFileName) ;
که تابع loadimage فوق را باید خودتان به ترتیب زیر تعریف کنید:
-ابتدا باز کردن فایل با CreateFile یا هر تابع در زبان های دیگر
- پیدا کردن اندازه فایل و اختصاص حافظه برای همان struct شما یعنی pbmfh
- خواندن فایل و ریختن در حافظه فوق ReadFile
بعد از طریق کد های زیر اشاره گری می سازید به دو بخش information برای هر نوع جزئیاتی و bit ها که شامل رنگ ها هستند .این یعنی اینکه مثلا pmbi به اندازه pbmfh بایت به علاوه یکی بره جلو و آن قسمت در فایل (که در حافظه لود شده) محل خواندن اطلاعات است.
pbmi = (BITMAPINFO *) (pbmfh + 1) ;
pBits = (BYTE *) pbmfh + pbmfh->bfOffBits ;
و مثلا برای خواندن طول و عرض عکس از همان struct تعریف شده استفاده می کنیم.
cxDib = ((BITMAPCOREHEADER *) pbmi)->bcWidth ;
cyDib = ((BITMAPCOREHEADER *) pbmi)->bcHeight ;
حالا هر چه را که تغییر دادید (که در حافظه انجام شده) دوباره باید از طریق ساخت فایل دیگری آنها را save کنید.